搴忚█
鏈枃鎵鎻愬強鐨刅TD-XML騫墮潪鏈枃浣滆呭師鍒涳紝浣滆呭彧鏄瀹冭繘琛屼粙緇嶃?
闂
閫氬父褰撴垜浠彁璧稾ML鐨勪嬌鐢ㄦ椂錛屾渶澶寸棝鐨勯儴鍒嗕究鏄疿ML鐨剉erbosity涓嶺ML鐨勮В鏋愰熷害錛屽綋闇瑕佸鐞嗗ぇXML鏂囦歡鏃惰繖涓棶棰樹究鍙樺緱鏍煎涓ラ噸銆傛垜鍦ㄨ繖閲屾彁鍙婄殑錛屼究鏄浣曚紭鍖朮ML澶勭悊閫熷害鐨勮瘽棰樸?
褰撴垜浠夋嫨澶勭悊XML鏂囦歡鐨勬椂鍊欙紝鎴戜滑澶ц嚧涓婃湁涓ょ閫夋嫨錛?
DOM錛岃繖鏄疻3C鐨勬爣鍑嗘ā鍨嬶紝瀹冨皢XML鐨勭粨鏋勪俊鎭互鏍戝艦鐨勬柟寮忔瀯寤猴紝鎻愪緵浜嗛亶鍘嗚繖棰楁爲鐨勬帴鍙d笌鏂規硶銆?
SAX錛屼竴縐嶄綆綰х殑parser錛岄愬厓绱犵殑鍚戝墠鍙澶勭悊錛屼笉鍚湁緇撴瀯淇℃伅銆?br />浠ヤ笂涓ょ閫夋嫨閮藉悇鏈夊埄寮婏紝浣嗘槸閮戒笉鏄壒鍒ソ鐨勮В鍐蟲柟妗堬紝瀹冧滑鐨勪紭緙虹偣濡備笅錛?
DOM
浼樼偣錛氭槗鐢ㄦу己錛屽洜涓烘墍鏈夌殑XML緇撴瀯淇℃伅閮藉瓨鍦ㄤ簬鍐呭瓨涓紝騫朵笖閬嶅巻綆鍗曪紝鏀寔XPath銆?
緙虹偣錛歅arsing閫熷害澶參錛屽唴瀛樺崰鐢ㄨ繃楂橈紙鍘熸枃浠剁殑5x~10x錛夛紝瀵逛簬澶ф枃浠舵潵璇村嚑涔庝笉鍙兘浣跨敤銆?br />SAX
浼樼偣錛歅arsing閫熷害蹇紝鍐呭瓨鍗犵敤涓嶄笌XML鐨勫ぇ灝忕浉鑱旂郴錛堝彲浠ュ仛鍒癤ML娑ㄥ唴瀛樹笉娑級銆?
緙虹偣錛氭槗鐢ㄦу樊錛屽洜涓烘病鏈夌粨鏋勪俊鎭紝騫朵笖鏃犳硶閬嶅巻錛屼笉鏀寔XPath銆傚鏋滈渶瑕佺粨鏋勭殑璇濆彧鑳借涓鐐規瀯閫犱竴鐐癸紝榪欐牱鐨勫彲緇存姢鎬х壒鍒殑宸?br />鎴戜滑鍙互鐪嬪嚭錛屽熀鏈笂DOM涓嶴AX鏄濂界浉鍙嶇殑涓や釜鏋佺錛屼絾鏄換浣曚竴涓兘涓嶈兘寰堝ソ鐨勬弧瓚蟲垜浠殑澶ч儴鍒嗚姹傦紝鎴戜滑闇瑕佹壘鍑哄彟澶栦竴縐嶅鐞嗘柟娉曟潵銆傛敞鎰廥ML鐨勬晥鐜囬棶棰樺茍涓嶆槸XML鏈韓鐨勯棶棰橈紝鑰屾槸澶勭悊XML鐨凱arser鐨勯棶棰橈紝灝卞儚鎴戜滑鍦ㄤ笂闈㈢湅鍒扮殑涓ょ鏂規硶鏈変笉鍚岀殑鏁堢巼鏉冭 涓鏍楓?/p>
鎬濊?
鎴戜滑寰堝枩嬈㈢被浼糄OM鐨勪嬌鐢ㄦ柟娉曪紝鍥犱負鎴戜滑鍙互閬嶅巻錛岃繖鎰忓懗鐫鍙互鏀寔XPath錛屽ぇ澶у寮轟簡鏄撶敤鎬э紝浣嗘槸DOM鐨勬晥鐜囧緢浣庛傚氨鍍忔垜浠凡緇忕煡閬擄紝鏁堢巼闂鍑哄湪澶勭悊鏈哄埗涓娿傞偅涔堬紝DOM鍒板簳鏈夊摢浜涙柟闈㈠獎鍝嶄簡瀹冪殑鏁堢巼鍛紵涓嬮潰璁╂垜浠潵鍋氫竴涓叏闈㈢殑瑙e墫錛?/p>
鍦ㄥ綋浠婂ぇ澶氭暟鍩轟簬铏氭嫙鏈猴紙鎵樼錛屾垨浠諱綍綾諱技鏈哄埗錛夋妧鏈殑騫沖彴涓嬶紝瀵硅薄鐨勫垱寤洪攢姣佹槸涓涓楁椂鐨勪綔涓氾紙榪欓噷鍊煎緱涓昏鏄疓arbage Collection鐨勮楁椂錛夛紝DOM鏈哄埗涓墍榪愮敤鐨勫ぇ閲忕殑瀵硅薄鍒涘緩閿姣佹棤鐤戞槸褰卞搷鍏舵晥鐜囩殑鍘熷洜涔嬩竴錛堜細寮曞彂榪囧鐨凣arbage Collection錛夈?
姣忎釜瀵硅薄閮戒細棰濆鏈?2bits鐢ㄦ潵瀛樺偍瀹冪殑鍐呭瓨鍦板潃錛屽綋鍍廌OM涓鏍鋒嫢鏈夊ぇ閲忓璞$殑鏃跺欒繖涓澶栧紑鏀篃鏄笉灝忕殑銆?
寮曡搗浠ヤ笂涓や釜闂鐨勬渶涓昏鐨勬晥鐜囬棶棰樺湪浜庯紝DOM涓嶴AX閮芥槸extractive parsing妯″紡錛岃繖縐嶈В鏋愭ā寮忔敞瀹氫簡DOM涓嶴AX閮介渶瑕佸ぇ閲忕殑鍒涘緩錛堥攢姣侊級瀵硅薄錛屽紩璧鋒晥鐜囬棶棰樸傛墍璋撶殑extractive parsing灝辨槸璇村湪瑙f瀽XML鏃訛紝DOM鎴朣AX浼氭彁鍙栦竴閮ㄥ垎鍘熸枃浠訛紙涓鑸潵璇存槸涓涓瓧絎︿覆錛夛紝鐒跺悗鍦ㄥ唴瀛樹腑榪涜瑙f瀽鏋勫緩錛堣緭鍑鴻嚜鐒跺氨鏄竴涓垨涓浜涘璞′簡錛夈傛嬁DOM榪欎釜渚嬪瓙鏉ヨ錛孌OM浼氬皢姣忎竴涓猠lement, attribute, processing-instruction, comment絳夌瓑閮借В鏋愭垚瀵硅薄騫剁粰涓庣粨鏋勶紝榪欏氨鏄墍璋撶殑extractive parsing銆?
鐢眅xtractive鐨勯棶棰樺甫鏉ョ殑鍙︿竴涓棶棰樹究鏄洿鏂版晥鐜囷紝鍦―OM涓紙SAX鍥犱負涓嶆敮鎸佹洿鏂版墍浠ユ牴鏈笉鎻愬畠錛夛紝姣忎竴嬈¢渶瑕佸仛鏀瑰姩鏃訛紝鎴戜滑瑕佸仛鐨勫氨鏄皢瀵硅薄鐨勪俊鎭啀瑙f瀽鍥瀀ML鐨勫瓧絎︿覆錛屾敞鎰忚繖涓В鏋愭槸涓畬鏁寸殑瑙f瀽錛屼篃灝辨槸璇達紝鍘熸枃浠跺茍娌℃湁琚埄鐢紝鑰屾槸鐩存帴灝咲OM妯″瀷閲嶆柊瀹屾暣瑙f瀽鎴怷ML瀛楃涓層傛崲鍙ヨ瘽璁詫紝涔熷氨鏄疍OM騫朵笉鏀寔Incremental Update錛堝閲忔洿鏂幫級銆?
鍙︿竴涓緢鍙兘涓嶈娉ㄦ剰鍒扮殑鈥滃皬鈥濋棶棰樹究鏄疿ML鐨勭紪鐮侊紝鏃犺鏄綍縐嶈В鏋愭柟娉曢兘闇瑕佽兘澶熷鐞哫ML鐨勭紪鐮侊紝涔熷氨鏄錛屽湪璇誨彇鐨勬椂鍊欒В鐮侊紝鍦ㄥ啓鍏ョ殑鏃跺欑紪鐮併侱OM鐨勫彟涓涓晥鐜囬棶棰樹究鏄綋鎴戝浜庝竴涓ぇXML鍙兂鍋氬緢灝忕殑涓鍧楀効淇敼鐨勬椂鍊欏畠涔熷繀欏婚鍏堝皢鏁翠釜鏂囦歡榪涜瑙g爜錛岀劧鍚庢瀯寤虹粨鏋勩傛棤褰腑鍙堟槸涓涓紑閿銆?br />璁╂垜浠潵鎬葷粨涓涓嬮棶棰橈紝綆鍗曠殑璁睤OM鐨勬晥鐜囬棶棰樹富瑕佸嚭鍦ㄥ畠鐨別xtractive parsing妯″紡涓婏紙SAX涔熸槸涓鏍鳳紝鏈夊悓鏍風殑闂錛夛紝鐢辨寮曞彂浜嗕竴緋誨垪鐩稿叧闂錛屽鏋滃彲浠ュ嚮鐮磋繖浜涙晥鐜囩摱棰堢殑璇濋偅涔堝彲浠ユ兂璞ML鐨勫鐞嗘晥鐜囧皢榪涗竴姝ョ殑寰楀埌鎻愰珮銆傚鏋淴ML鐨勬槗鐢ㄦт笌澶勭悊鏁堢巼寰楀埌椋炶穬鎬х殑鎻愰珮鐨勮瘽錛岄偅涔圶ML鐨勫簲鐢ㄨ寖鍥達紝搴旂敤妯″紡灝嗗緱鍒版洿涓姝ョ殑鍗囧崕錛屾垨璁哥敱姝ゅ彲浠ヤ駭鐢熷嚭璁歌澶氬綺懼僵鐨勪互鍓嶈繛鎯抽兘娌℃湁鎯寵繃鐨勫熀浜嶺ML鐨勪駭鍝佹潵銆?/p>
鍑鴻礬
VTD-XML渚挎槸瀵逛互涓婇棶棰樼殑鎬濊冨悗緇欏嚭鐨勭瓟妗堬紝瀹冩槸涓涓猲on-extractive XML parser錛岀敱浜庡畠鍑鴻壊鐨勬満鍒訛紝寰堝ソ鐨勮В鍐籌紙閬垮厤錛変簡涓婇潰鎵鎻愬嚭鐨勫悇縐嶉棶棰橈紝騫朵笖榪樷滈『渚庫濆甫鏉ヤ簡non-extractive鐨勫叾浠栧ソ澶勶紝鍍忓揩閫熺殑瑙f瀽涓庨亶鍘嗐乆Path鐨勬敮鎸併両ncremental Update絳夌瓑銆傛垜榪欓噷鏈変竴緇勬暟鎹紝鍙栬嚜浜嶸TD-XML鐨勫畼鏂圭綉绔欙細
VTD-XML鐨勮В鏋愰熷害鏄疭AX錛坵ith NULL content handler錛夌殑1.5x~2.0x銆俉ith NULL content handler鐨勬剰鎬濆氨鏄SAX瑙f瀽涓病鏈夋彃鍏ヤ換浣曢澶栫殑澶勭悊閫昏緫錛屼篃灝辨槸SAX鐨勬渶楂橀熷害銆?
VTD-XML鐨勫唴瀛樺崰鐢ㄦ槸鍘焁ML鐨?.3x~1.5x錛堝叾涓?.0x鐨勯儴鍒嗘槸鍘焁ML錛?.3x~0.5x鏄疺TD-XML鍗犵敤鐨勯儴鍒嗭級錛岃孌OM鐨勫唴瀛樺崰鐢ㄥ垯鏄師XML鐨?x~10x銆備婦涓涓緥瀛愶紝濡傛灉涓涓猉ML鐨勫ぇ灝忔槸50MB錛岄偅涔堢敤VTD-XML璇誨彇榪涙潵鍐呭瓨鍗犵敤浼氬湪65MB~75MB涔嬮棿錛岃孌OM鐨勫唴瀛樺崰鐢ㄥ垯浼氬湪250M~500MB涔嬮棿銆傚熀浜庤繖涓暟鎹敤DOM澶勭悊澶х殑XML鏂囦歡鍑犱箮鏄笉鍙兘鐨勯夋嫨銆?br />浣犲彲鑳戒細瑙夊緱涓嶅彲鎬濊錛岀湡鐨勫彲浠ュ仛鍑烘瘮DOM鏄撶敤鎬ц繕濂斤紝姣擲AX榪樺揩鐨刋ML瑙f瀽鍣ㄥ悧錛熷埆鎬ョ潃涓嬪畾璁猴紝榪樻槸鏉ョ湅鐪媀TD-XML鐨勫師鐞嗗惂錛?/p>
鍩烘湰鍘熺悊
灝卞儚澶у鏁板ソ鐨勪駭鍝佷竴鏍鳳紝VTD-XML鐨勫師鐞嗗茍涓嶅鏉傦紝鑰屾槸寰堝閥濡欍備負浜嗗疄鐜皀on-extractive榪欎釜鐩殑錛屽畠灝嗗師XML鏂囦歡鍘熷皝涓嶅姩鐨勪互浜岃繘鍒剁殑鏂瑰紡璇昏繘鍐呭瓨錛岃繛瑙g爜閮戒笉鍋氾紝鐒跺悗鍦ㄨ繖涓猙yte鏁扮粍涓婅В鏋愭瘡涓猠lement鐨勪綅緗茍鎶婁竴浜涗俊鎭褰曚笅鏉ワ紝涔嬪悗鐨勯亶鍘嗘搷浣滀究鍦ㄨ繖浜涗繚瀛樹笅鏉ョ殑record涓婅繘琛岋紝濡傛灉闇瑕佹彁鍙朮ML鍐呭灝卞埄鐢╮ecord涓殑浣嶇疆絳変俊鎭湪鍘熷byte鏁扮粍涓婅繘琛岃В鐮佸茍榪斿洖瀛楃涓層傝繖涓鍒囩湅璧鋒潵閮藉緢綆鍗曪紝浣嗘槸錛岃繖涓畝鍗曠殑榪囩▼紜湁澶氫釜鎬ц兘緇嗚妭鍦ㄩ噷杈癸紝騫朵笖闅愯棌浜嗚嫢騫蹭釜娼滃湪鐨勮兘鍔涖備笅闈㈡垜浠鍏堟潵鎻忚堪涓涓嬪悇涓ц兘緇嗚妭錛?/p>
涓轟簡閬垮厤榪囧鐨勫璞″垱寤猴紝VTD-XML鍐沖畾閲囩敤鍘熷鐨勬暟鍊肩被鍨嬩綔涓簉ecord鐨勭被鍨嬶紝榪欐牱灝卞彲浠ヤ笉蹇呯敤heap銆俈TD-XML鐨剅ecord鏈哄埗灝卞彨鍋歏TD錛圴irtual Token Descriptor錛夛紝VTD灝嗘ц兘鐡墮鍦╰okenization闃舵灝辮В鍐蟲帀浜嗙湡鐨勬槸寰堝閥濡欏緢鐢ㄥ績鐨勫仛娉曘俈TD鏄竴涓?4bits闀垮害鐨勬暟鍊肩被鍨嬶紝璁板綍浜嗘瘡涓猠lement鐨勮搗濮嬩綅緗紙offset錛夛紝闀垮害錛坙ength錛夛紝娣卞害錛坉epth錛変互鍙妕oken鐨勭被鍨嬶紙type錛夌瓑淇℃伅銆?
娉ㄦ剰VTD鏄浐瀹氶暱搴︾殑錛堝畼鏂瑰喅瀹氱敤64bits錛夛紝榪欐牱鍋氱殑鐩殑灝辨槸涓轟簡鎻愰珮鎬ц兘錛屽洜涓洪暱搴﹀浐瀹氾紝鍦ㄨ鍙栵紝鏌ヨ絳夋搷浣滅殑鏃跺欐牸澶栫殑楂樻晥錛圤(1)錛夛紝涔熷氨鏄彲浠ョ敤鏁扮粍榪欑楂樻晥鐨勭粨鏋勬潵緇勭粐VTD澶уぇ鍑忓皯浜嗗洜涓哄ぇ閲忎嬌鐢ㄥ璞¤屼駭鐢熺殑鎬ц兘闂銆?
VTD鐨勮秴鑳藉姏錛堜竴鐐歸兘涓嶅じ寮犲湴璇達級灝卞湪浜庡畠鑳藉灝哫ML榪欑鏍戝艦鐨勬暟鎹粨鏋勭畝鍗曠殑鍙樻崲鎴愬涓涓猙yte鏁扮粍鐨勬搷浣滐紝浠諱綍浣犺兘鎯寵薄鍒扮殑瀵逛簬byte鏁扮粍鐨勬搷浣滈兘鍙互搴旂敤鍦╔ML涓婁簡銆傝繖鏄洜涓鴻鍙栬繘鏉ョ殑XML鏄簩榪涘埗鐨勶紙byte鏁扮粍錛夛紝鑰孷TD鍒欒褰曚簡姣忎釜element鐨勪綅緗瓑璁塊棶鐢ㄤ俊鎭紝褰撴垜浠壘鍒拌鎿嶄綔鐨刅TD鐨勬椂鍊欙紝鍙鐢╫ffset涓巐ength絳変俊鎭氨鍙互瀵瑰師濮媌yte鏁扮粍榪涜浠諱綍鎿嶄綔錛屾垨鑰呭彲浠ョ洿鎺ュVTD榪涜鎿嶄綔銆備婦渚嬫潵璇達紝鎴戞兂鍦ㄤ竴涓ぇXML涓壘鍑轟竴涓猠lement騫跺垹闄ゅ畠錛岄偅涔堟垜鍙渶瑕佹壘鍒拌繖涓猠lement鐨刅TD錛堥亶鍘嗘柟娉曠◢鍊欏啀璁詫級錛屽皢榪欎釜VTD浠嶸TD鏁扮粍涓垹闄わ紝鐒跺悗鍐嶅埄鐢ㄦ墍鏈夌殑VTD鍐欏嚭鍒板彟涓涓猙yte鏁扮粍涓氨鍙互浜嗭紝鍥犱負鍒犻櫎鐨刅TD鏍囨槑浜嗚鍒犻櫎鐨別lement鐨勪綅緗紝鎵浠ュ湪鏂板啓鍏ョ殑byte鏁扮粍涓氨涓嶄細鍑虹幇榪欐element浜嗭紝鐢╒TD鍐欏叆鏂扮殑byte鏁扮粍瀹為檯涓婂氨鏄竴涓猙yte鏁扮粍鐨勬嫹璐濓紝鍏舵晥鐜囩浉褰撶殑楂橈紝榪欏氨鏄墍璋撶殑澧為噺鏇存柊錛坕ncremental update錛夈?br />鍏充簬VTD-XML鐨勯亶鍘嗘柟寮忥紝瀹冮噰鐢ㄤ簡LC (Location Cache)錛岀畝鍗曞湴璇村氨鏄皢VTD浠ュ叾娣卞害浣滀負鏍囧噯鏋勫緩鐨勪竴涓爲褰㈢殑琛ㄧ粨鏋勩侺C鐨別ntry涔熸槸64bits闀跨殑鏁板肩被鍨嬶紝鍓?2bits浠h〃涓涓猇TD鐨勭儲寮曪紙index錛夛紝鍚?2bits浠h〃浜嗚繖涓猇TD鐨勭涓涓猚hild鐨勭儲寮曘傚埄鐢ㄨ繖浜涗俊鎭氨鍙互璁$畻鍑轟換浣曚竴涓綘鎯寵鍒拌揪鐨勪綅緗簡錛屽叧浜庡叿浣撶殑閬嶅巻鏂規硶璇峰弬鐪嬪畼鏂圭綉绔欑殑鏂囩珷銆傚熀浜庤繖縐嶉亶鍘嗘柟寮忕殑VTD-XML鏈変笌DOM涓嶅悓鐨勬搷浣滄帴鍙o紝榪欐槸鍙互鐞嗚В鐨勶紝騫朵笖錛孷TD-XML鐨勮繖縐嶉亶鍘嗘柟寮忓彲浠ュ湪鏈灝戠殑鍑犳鍐呭皢浣犲甫鍒頒綘鎵闇瑕佺殑鍦版柟鍘伙紝閬嶅巻鐨勬ц兘鍗佸垎紿佸嚭銆?/p>
鎬葷粨
灝卞儚浣犱笂闈㈢湅鍒扮殑錛孷TD-XML鏈夌潃榪蜂漢鐨勭壒鎬э紝鑰屽浠婄殑1.5鐗堟湰涓凡緇忓姞鍏ヤ簡XPath鐨勬敮鎸侊紙鍙鍙互閬嶅巻錛屽氨鍙互鏀寔XPath錛岃繖鏄棭鏅氱殑浜?-)錛夛紝瀹冪殑瀹炵敤鎬у凡緇忚秴瓚婁簡褰撲粖鎴戜滑鎵鎯寵薄鐨勮寖鍥翠簡銆傚彟涓涓猇TD-XML鐨勮秴鑳藉姏錛屽氨鏄熀浜庡畠鐜板湪鐨勫鐞嗘柟寮忥紝瀹屽叏鍙互鏀寔灝嗘潵鐨凚inary XML鏍囧噯錛屽茍閫氳繃Binary鍖栧皢XML鐨勫簲鐢ㄦ帹鍚戞洿楂樹竴灞傛ゼ錛佽繖涔熸槸鎴戠洰鍓嶆墍鏈熷緟鐨勶紒:-)
涓嶈繃錛孷TD-XML浠嶇劧鏈夎澶氶渶瑕佹敼榪涗笌瀹屽杽鐨勫湴鏂癸紝榪欐柟闈㈠煎緱鎴戜滑鍔姏涓庢帰璁ㄣ?/p>
欏轟究鎻愪竴涓嬶紝VTD-XML鏄紑婧愰」鐩紙GPL錛夛紝鐩墠鏈塉ava銆丆涓ょ騫沖彴鏀寔銆傚鏋滀綘鎯沖湪.NET璇曚竴璇曠殑璇濆緩璁綘浣跨敤IKVM錛圔SD style license錛夊皢VTD-XML杞崲鎴?NET紼嬪簭闆嗭紝鐩鎬俊浣犱細鍠滄涓婂畠鐨勶紒;-)