新興XML處理方法VTD-XML介紹_Xml教程
推薦:怎樣使用XML實(shí)現(xiàn)多渠道接入網(wǎng)站的構(gòu)架一.背景在現(xiàn)在的網(wǎng)站中,接入的渠道是越來(lái)越多了,技術(shù)也是越來(lái)越先進(jìn),WAP, SMS,EMAIL, 傳統(tǒng)的Web, Socket等等,如果連數(shù)據(jù)庫(kù)和LDAP也算接入的話,那在設(shè)計(jì)之中需要擴(kuò)展的空間要做到很好 很好
序言
本文所提及的VTD-XML并非本文作者原創(chuàng),作者只是對(duì)它進(jìn)行介紹。
問(wèn)題
通常當(dāng)我們提起XML的使用時(shí),最頭痛的部分便是XML的verbosity與XML的解析速度,當(dāng)需要處理大XML文件時(shí)這個(gè)問(wèn)題便變得格外嚴(yán)重。我在這里提及的,便是如何優(yōu)化XML處理速度的話題。
當(dāng)我們選擇處理XML文件的時(shí)候,我們大致上有兩種選擇:
DOM,這是W3C的標(biāo)準(zhǔn)模型,它將XML的結(jié)構(gòu)信息以樹(shù)形的方式構(gòu)建,提供了遍歷這顆樹(shù)的接口與方法。
SAX,一種低級(jí)的parser,逐元素的向前只讀處理,不含有結(jié)構(gòu)信息。
以上兩種選擇都各有利弊,但是都不是特別好的解決方案,它們的優(yōu)缺點(diǎn)如下:
DOM
優(yōu)點(diǎn):易用性強(qiáng),因?yàn)樗械腦ML結(jié)構(gòu)信息都存在于內(nèi)存中,并且遍歷簡(jiǎn)單,支持XPath。
缺點(diǎn):Parsing速度太慢,內(nèi)存占用過(guò)高(原文件的5x~10x),對(duì)于大文件來(lái)說(shuō)幾乎不可能使用。
SAX
優(yōu)點(diǎn):Parsing速度快,內(nèi)存占用不與XML的大小相聯(lián)系(可以做到XML漲內(nèi)存不漲)。
缺點(diǎn):易用性差,因?yàn)闆](méi)有結(jié)構(gòu)信息,并且無(wú)法遍歷,不支持XPath。如果需要結(jié)構(gòu)的話只能讀一點(diǎn)構(gòu)造一點(diǎn),這樣的可維護(hù)性特別的差。
我們可以看出,基本上DOM與SAX是正好相反的兩個(gè)極端,但是任何一個(gè)都不能很好的滿足我們的大部分要求,我們需要找出另外一種處理方法來(lái)。注意XML的效率問(wèn)題并不是XML本身的問(wèn)題,而是處理XML的Parser的問(wèn)題,就像我們?cè)谏厦婵吹降膬煞N方法有不同的效率權(quán)衡一樣。
思考
我們很喜歡類(lèi)似DOM的使用方法,因?yàn)槲覀兛梢员闅v,這意味著可以支持XPath,大大增強(qiáng)了易用性,但是DOM的效率很低。就像我們已經(jīng)知道,效率問(wèn)題出在處理機(jī)制上。那么,DOM到底有哪些方面影響了它的效率呢?下面讓我們來(lái)做一個(gè)全面的解剖:
在當(dāng)今大多數(shù)基于虛擬機(jī)(托管,或任何類(lèi)似機(jī)制)技術(shù)的平臺(tái)下,對(duì)象的創(chuàng)建銷(xiāo)毀是一個(gè)耗時(shí)的作業(yè)(這里值得主要是Garbage Collection的耗時(shí)),DOM機(jī)制中所運(yùn)用的大量的對(duì)象創(chuàng)建銷(xiāo)毀無(wú)疑是影響其效率的原因之一(會(huì)引發(fā)過(guò)多的Garbage Collection)。
每個(gè)對(duì)象都會(huì)額外有32bits用來(lái)存儲(chǔ)它的內(nèi)存地址,當(dāng)像DOM一樣擁有大量對(duì)象的時(shí)候這個(gè)額外開(kāi)支也是不小的。
引起以上兩個(gè)問(wèn)題的最主要的效率問(wèn)題在于,DOM與SAX都是extractive parsing模式,這種解析模式注定了DOM與SAX都需要大量的創(chuàng)建(銷(xiāo)毀)對(duì)象,引起效率問(wèn)題。所謂的extractive parsing就是說(shuō)在解析XML時(shí),DOM或SAX會(huì)提取一部分原文件(一般來(lái)說(shuō)是一個(gè)字符串),然后在內(nèi)存中進(jìn)行解析構(gòu)建(輸出自然就是一個(gè)或一些對(duì)象了)。拿DOM這個(gè)例子來(lái)說(shuō),DOM會(huì)將每一個(gè)element, attribute, processing-instruction, comment等等都解析成對(duì)象并給與結(jié)構(gòu),這就是所謂的extractive parsing。
由extractive的問(wèn)題帶來(lái)的另一個(gè)問(wèn)題便是更新效率,在DOM中(SAX因?yàn)椴恢С指滤愿静惶崴�,每一次需要做改�?dòng)時(shí),我們要做的就是將對(duì)象的信息再解析回XML的字符串,注意這個(gè)解析是個(gè)完整的解析,也就是說(shuō),原文件并沒(méi)有被利用,而是直接將DOM模型重新完整解析成XML字符串。換句話講,也就是DOM并不支持Incremental Update(增量更新)。
另一個(gè)很可能不被注意到的“小”問(wèn)題便是XML的編碼,無(wú)論是何種解析方法都需要能夠處理XML的編碼,也就是說(shuō),在讀取的時(shí)候解碼,在寫(xiě)入的時(shí)候編碼。DOM的另一個(gè)效率問(wèn)題便是當(dāng)我對(duì)于一個(gè)大XML只想做很小的一塊兒修改的時(shí)候它也必須首先將整個(gè)文件進(jìn)行解碼,然后構(gòu)建結(jié)構(gòu)。無(wú)形中又是一個(gè)開(kāi)銷(xiāo)。
讓我們來(lái)總結(jié)一下問(wèn)題,簡(jiǎn)單的講DOM的效率問(wèn)題主要出在它的extractive parsing模式上(SAX也是一樣,有同樣的問(wèn)題),由此引發(fā)了一系列相關(guān)問(wèn)題,如果可以擊破這些效率瓶頸的話那么可以想象XML的處理效率將進(jìn)一步的得到提高。如果XML的易用性與處理效率得到飛躍性的提高的話,那么XML的應(yīng)用范圍,應(yīng)用模式將得到更一步的升華,或許由此可以產(chǎn)生出許許多多精彩的以前連想都沒(méi)有想過(guò)的基于XML的產(chǎn)品來(lái)。
分享:解讀從實(shí)際應(yīng)用中了解WML學(xué)習(xí)自然語(yǔ)言的最好方法就是溶入相應(yīng)的語(yǔ)言環(huán)境在交流中學(xué)習(xí),學(xué)習(xí)一種編程語(yǔ)言的最好方法就是看例程。為了幫助大家建立wml應(yīng)用的第一印象,所以請(qǐng)大家先看第一個(gè)例子:
- xml創(chuàng)建節(jié)點(diǎn)(根節(jié)點(diǎn)、子節(jié)點(diǎn))
- WML開(kāi)發(fā)教程之 WAP網(wǎng)站服務(wù)器配置方法
- WMLScript的語(yǔ)法基礎(chǔ)
- 收集的WML Script標(biāo)準(zhǔn)函數(shù)庫(kù)
- WML教程之文本框控件Input
- 無(wú)線標(biāo)記語(yǔ)言(WML)基礎(chǔ)之WMLScript 基礎(chǔ)
- xml文件的結(jié)構(gòu)解讀
- 關(guān)于XSL - XSL教程
- 選擇模式 - XSL教程 - 2
- XPath入門(mén) - XSL教程 - 3
- 匹配模式 - XSL教程 - 4
- 測(cè)試模式 - XSL教程 - 5
- 相關(guān)鏈接:
- 教程說(shuō)明:
Xml教程-新興XML處理方法VTD-XML介紹
。