锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浣滆?Jimmy Zhang;rainy14f(浣滆呯殑blog:http://shaofan.blogjava.net/)
姒傝
VTD-XML鏀瑰彉浜嗘父鎴?/span>
璧勬簮
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=933706
鍋氫負涓嬩竴浠EB搴旂敤鐨勬帹鍔ㄦф妧鏈紝XML鐩稿綋綆鍗曪紝鏄撳鏄撶敤銆傜劧鑰岋紝褰撳墠鐨刋ML澶勭悊鎶鏈嵈闈炲姝ゃ侱ocument Object Model鍜孲imple API for XML閮芥瘮杈冩參錛屼綆鏁堬紝涓斾笉鏄撲簬浣跨敤銆俈TD-XML錛屼綔涓轟笅涓浠g殑XML澶勭悊妯″瀷錛屾彁渚涜秴瓚奃OM鍜孲AX鐨勫箍娉涚敤閫斿拰鏇翠匠閫夋嫨錛屼笉浠呭彲浠ョ畝鍖朮ML緙栫▼錛屼篃浣塊夋嫨XML澶勭悊妯″瀷鏇村姞瀹規槗銆傝繖綃囨枃绔犻氳繃鏈榪戠殑鍩哄噯嫻嬭瘯鏁版嵁鍜岀ず渚嬬▼搴忔潵紿佹樉瀹冪殑鍏抽敭鎬х殑鎶鏈紭鍔匡紝鏄劇ず鍑篤TD-XML灝嗗彲鑳借В鍐抽暱鏈熶互鏉ュ洶鎵頒紒涓氭灦鏋勭殑錛屽湪DOM鍜孲AX涔嬮棿榪涜鎶夋嫨鐨勯棶棰樸?br />
鑷粠璇炵敓浠ユ潵鐨勫叓騫撮噷錛孹ML浣滀負涓涓紑鏀撅紝鍗婄粨鏋勫寲鐨勬暟鎹牸寮忓拰WEB搴旂敤鐨勬暟鎹氦鎹㈠伐鍏鳳紝宸插彇寰椾簡闀胯凍榪涙銆傜敱浜庡畠鐨勭畝鏄撴у拰鑹ソ鐨勫彲璇繪э紝XML鍙楀埌寮鍙戜漢鍛樼殑鐑儓嬈㈣繋錛屽茍涓斿凡緇忔垚涓轟簡浼佷笟鏋舵瀯涓嶅彲鍒嗗壊鐨勪竴閮ㄥ垎銆?br />
铏界劧寰堥毦璇存竻XML鍒板簳鏈夊灝戠涓嶅悓鐨勫簲鐢紝浣嗚嚦灝戞湁涓鐐規槸鑲畾鐨勶細XML瑙f瀽澶勭悊宸叉垚涓哄悇縐嶅伐浣滅殑鍏堝喅浠誨姟銆傚疄闄呬笂錛屽喅瀹氫嬌鐢ㄥ摢縐嶈В鏋愬櫒涔熺粡甯告槸浼佷笟寮鍙戣呭湪欏圭洰涓繀欏婚鍏堣В鍐崇殑闂涔嬩竴銆傞暱涔呬互鏉ワ紝榪欏叾瀹炲氨鏄湪涓ょ XML澶勭悊妯″瀷涔嬮棿鍋氬嚭閫夋嫨錛欴ocument Object Model (DOM) 鍜?Simple API for XML (SAX)銆?br />
綺楃湅涔嬩笅錛孌OM鍜孲AX鍚勮嚜鐨勪紭緙虹偣鍒氬ソ褰㈡垚浜掕ˉ銆侱OM浣跨敤鍐呭瓨淇濆瓨瀵硅薄緇撴瀯錛涜孲AX鍒欏熀浜庝簨浠跺茍涓斾笉浣跨敤鍐呭瓨鏉ュ瓨鍌ㄤ換浣曟暟鎹傚洜姝わ紝DOM姣旇緝閫傚悎鏂囨。杈冨皬鑰屾暟鎹闂ā寮忓鏉傜殑鎯呭喌錛岀浉鍙嶆儏鍐典笅錛屽垯浣跨敤SAX銆?br />
鐒惰屼簨瀹炲嵈騫朵笉榪欎箞鍗曠函銆傚緢澶氭儏鍐典笅錛屽紑鍙戣呬笉鎯呮効浣跨敤澶嶆潅鐨凷AX錛屼絾鍙堜笉寰椾笉鐢紝鍥犱負娌℃湁鍏朵粬閫夋嫨銆傛澶栵紝鍗充嬌XML鏂囦歡鐨勫ぇ灝忓彧鏄◢寰ぇ浜庡嚑鐧綤錛孌OM鐨勫唴瀛樺紑閿鍜屾ц兘榪熸粸涔熶細鎴愪負媯樻墜鐨勯殰紕嶏紝浣垮緱紼嬪簭鏃犳硶杈懼埌欏圭洰鎵瑕佹眰鐨勬渶浣庢ц兘鐩爣銆?br />
閭d箞鏄惁SAX鐨勬ц兘鐪熷緱濂藉緱澶氾紵瀹為檯涓婏紝SAX鎵鍚瑰槝鐨勮В鏋愭ц兘鈥曗曢氬父姣擠OM蹇嚑鍊嶁曗曞父甯告槸涓嶇幇瀹炵殑銆備簨瀹炴樉紺猴紝SAX絎ㄦ嫏鐨勶紝鍙兘寰鍓嶇殑瑙f瀽涓嶄粎鍦ㄤ嬌鐢ㄦ椂鐩稿綋涓嶄究錛岃屼笖褰撴枃妗g粨鏋勭◢寰鏉傛椂錛屼篃浼氶亣鍒版ц兘闂銆傚鏋滃紑鍙戜漢鍛樹笉鎯沖嬈℃壂鎻忔枃妗o紝閭d箞灝遍渶瑕佸鏂囨。榪涜緙撳啿錛屾垨鏋勫緩鑷繁鐨勫璞℃ā鍨嬨?br />
涓嶇浣跨敤鍝鏂規硶錛屾ц兘閮戒細鎴愪負闂錛屾濡侫pache Axis鎵璇佹槑鐨勯偅鏍楓傚湪Axis鐨凢AQ欏甸潰錛屽畠澹扮О浣跨敤浜哠AX鏉ユ瀯寤洪珮鎬ц兘鐨勫疄鐜幫紝浣嗗畠浠嶇劧浣跨敤浜嗕粬浠嚜宸辯殑鍜孌OM闈炲父鐩稿儚鐨勫璞℃ā鍨嬨備絾涓庡畠鐨勫墠浠?(Apache SOAP) 鐩告瘮錛岃繖縐嶅仛娉曞茍娌℃湁甯︽潵鏄庢樉鐨勬ц兘鎻愬崌銆傝屼笖錛孲AX鏃犳硶澶勭悊XPath錛屼竴鑸潵璇翠篃鏃犳硶椹卞姩XSLT (Extensible Stylesheet Language Transformation) 鐨勫鐞嗐傚洜姝わ紝SAX浠嶇劧鏃犳硶鐪熸瑙e喅XML澶勭悊涓殑闂銆?br />
涓轟簡瀵繪壘涓涓洿鏄撶敤鐨凷AX鐨勫彇浠f柟妗堬紝瓚婃潵瓚婂鐨勫紑鍙戜漢鍛樺紑浣胯漿鍚慡tAX (Streaming API for XML)銆備笌SAX鐩告瘮錛孲tAX浣跨敤浠嶺ML鏂囦歡涓彁鍙栨爣璁扮殑鏂規硶錛岃屼笉鏄洖璋冦傝繖縐嶆柟妗堟樉钁楀湴鏀瑰杽浜嗗彲鐢ㄦэ紝浣嗕竴涓熀鏈殑闂浠嶇劧瀛樺湪鈥曗昐tAX鐨勫彧鑳藉線鍓嶇殑瑙f瀽瀵逛簬紼嬪簭鍛樹緷鐒朵笉渚匡紝鑰屼笖瀛樺湪闅愯棌鐨勬ц兘鎹熷け銆?br />
搴曠嚎鏄細浠諱綍鎯沖緱鍒板箍娉涘簲鐢ㄧ殑XML澶勭悊妯″瀷錛屽繀闇鑳藉瀹屾暣浣撶幇XML鐨勫眰嬈$粨鏋勩傝繖鏄洜涓猴紝XML鏄璁捐涓哄湪WEB涓婁紶杈撳鏉傛暟鎹殑錛屽洜姝ゅ畬鏁村睍鐜板畠鐨勭粨鏋勪俊鎭篃鏄畠鐨勪換鍔′箣涓銆?/p>
鍋囪鎴戜滑瑕佷粠澶村紑濮嬩竴涓猉ML澶勭悊榪囩▼錛屽茍鍏嬫湇涓婇潰鎻愬埌鐨凞OM鍜孲AX鐨勭縐嶇己鐐癸紝閭d箞榪欎釜鏂扮殑妯″瀷搴旇鍏鋒湁浠ヤ笅灞炴э細
* 闅忔満璁塊棶鑳藉姏錛氬鐞嗘ā鍨嬪簲璇ュ厑璁稿紑鍙戜漢鍛樻柟渚胯闂枃妗g殑鏌愮灞傛緇撴瀯錛屾瘮濡傦紝浣跨敤XPath錛屾垨鎵嬪姩銆?br />* 楂樻ц兘錛氭ц兘涓婁笌DOM鍙奡AX鐩告瘮錛屽簲鏈夋樉钁楁彁楂橈紝鑰屼笖榪欎釜鈥滄ц兘鈥濆簲璇ユ槸鐪熷疄鐨勶紝灝辨槸璇達紝搴旇鎶婂緩绔嬫枃妗e眰嬈$粨鏋勭殑鏃墮棿涔熺畻涓娿?br />* 浣庡唴瀛樺崰鐢ㄧ巼錛氳浣胯妯″瀷鑳藉琚箍娉涘簲鐢ㄤ簬鍚勭鍦烘櫙錛屼笉綆℃枃浠剁殑澶у皬錛岄偅瀹冨氨蹇呴』鑳藉浠ユ渶浣庣殑鍐呭瓨娑堣楁潵琛ㄧ幇XML鐨勭粨鏋勩?br />
VTD-XML灝辨槸涓涓疄鐜頒簡榪欎簺鐩爣鐨勪笅涓浠g殑寮婧怷ML澶勭悊妯″瀷銆傚畠鐩告瘮浜嶥OM鍜孲AX鏈夌潃鏈川鍜屽叏闈㈢殑鏀硅繘銆俈TD-XML鐨勪竴涓叧閿紭鍖栨槸闈炴彁鍙栫鍙?non-extractive tokenization)銆傚湪鍏跺唴閮紝VTD-XML鍦ㄥ唴瀛樹腑淇濆瓨瀹屾暣鍙婃湭瑙g爜鐨刋ML娑堟伅錛屽茍浣跨敤涓涓簩榪涘埗緙栫爜瑙勮寖鏉ュ敮涓鍦拌〃紺烘瘡涓鍙楓傝繖縐嶈鑼冭縐頒負Virtual Token Descriptor錛堣櫄鎷熺鍙鋒弿榪扮錛夈傛瘡涓猇TD璁板綍閮芥槸涓涓?4瀛楄妭鐨勬暣鏁幫紝瀹冨XML涓鍙風殑闀垮害錛岃搗濮嬪亸縐婚噺錛岀被鍨嬶紝宓屽娣卞害榪涜浜嗙紪鐮併?br />
鍐嶇畝鍗曞湴浠嬬粛涓涓媀TD-XML鐨勫巻鍙詫紝涔熻浣犱細鎰熷叴瓚o細鏈鍒濊繖涓蹇墊槸琚敤鏉ュ湪鐗瑰畾紜歡璁懼涓婁嬌鐢紝浠ヤ嬌榪欎簺紜歡錛堝璺敱鍣紝浜ゆ崲鏈猴級鍙互楂橀熷鐞哫ML錛屾瘮濡侳PGA,ASIC銆傛鍚庯紝VTD-XML欏圭洰緇勫喅瀹氫嬌瀹冨紑婧愶紝騫朵簬2004騫翠簲鏈堝彂甯冧簡VTD-XML鐨勬渶鍒濈増鏈紝0.5鐗堬紝鐢↗AVA瀹炵幇銆備粠閭f椂璧楓俈TD-XML緇忓巻浜嗗嬈℃敼榪涘茍瓚婃潵瓚婃垚鐔熴傚湪0.8鐗堟湰涓紝C璇█鐗堟湰鐨刅TD-XML涓嶫AVA鐗堝悓鏃跺彂甯冦傚湪1.0鐗堜腑寮曞叆浜嗗XPath鐨勫唴寤烘敮鎸侊紝浜?005騫?0鏈堝彂甯冦傛渶鏂扮殑鐗堟湰鏄?.5鐗堬紝瀹冪殑瑙f瀽寮曟搸琚噸鏂扮紪鍐欎互瀹炵幇鏇村己鐨勬ā鍧楀寲鍜屾洿楂樼殑鎬ц兘銆?br />
鍚屾牱錛屽湪榪欎釜鐗堟湰涓繕鍑虹幇浜嗕竴涓柊鐨勭壒鎬э紝鍙綔緙撳啿閲嶇敤銆傚畠鐨勫熀鏈蹇墊槸錛屽綋XML搴旂敤闇瑕侀氳繃緗戠粶榪炴帴鏉ュ弽澶嶅湴璇誨叆XML鏂囨。鏃訛紝璇ュ簲鐢ㄤ細閲嶇敤鍦ㄧ涓嬈″鐞嗕腑鍒嗛厤鐨勫唴瀛樼紦鍐層傛崲鍙ヨ瘽璇達紝鍗充竴嬈″垎閰嶏紝澶氭浣跨敤銆傚氨VTD-XML鏉ヨ錛岃繖涓壒鎬у畬鍏ㄦ秷闄や簡鍦ㄥ鐞哫ML榪囩▼涓緩绔嬪璞″拰鍨冨溇鍥炴敹鐨勫紑閿錛堝湪DOM鍜孲AX涓崰鐢?0%鑷?0%鐨勫紑閿錛夈傚湪璇ラ」鐩殑緗戠珯涓婏紝鎻愪緵鏈夋渶鏂扮殑杞歡涓嬭澆鍜屾繁灞傛妧鏈鏄庛?br />
涓涓畝鐭緥瀛?/span>
涓轟簡浣夸綘鏇村ソ鍦頒簡瑙TD-XML緙栫▼鐨勯鏍鹼紝鏈枃棣栧厛瀵圭敤VTD-XML鍜孌OM瑙f瀽鍜岃闂竴涓畝鍗曠殑XML鏂囦歡榪涜瀵規瘮銆傝鏂囦歡鍚嶄負test.xml錛屽唴瀹瑰涓嬶細<purchaseOrder orderDate="1999-10-21">
聽聽聽聽聽聽 <item partNum="872-AA">
聽聽聽聽聽聽聽聽 <productName>Lawnmower</productName>
聽聽聽聽聽聽聽聽 <quantity>1</quantity>
聽聽聽聽聽聽聽聽 <USPrice>148.95</USPrice>
聽聽聽聽聽聽 </item>
</purchaseOrder>
VTD-XML鐗堟湰鐨勭▼搴忓涓嬶細import com.ximpleware.*;
import com.ximpleware.parser.*;
import java.io.*;
public class use_vtd {
聽聽聽聽public static void main(String[] args){
聽聽聽聽聽聽聽聽try{
聽聽聽聽聽聽聽聽聽聽聽聽File f = new File("test.xml");
聽聽聽聽聽聽聽聽聽聽聽聽FileInputStream fis = new FileInputStream(f);
聽聽聽聽聽聽聽聽聽聽聽聽byte[] ba = new byte[(int)f.length()];
聽聽聽聽聽聽聽聽聽聽聽聽fis.read(ba);
聽聽聽聽聽聽聽聽聽聽聽聽VTDGen vg = new VTDGen();
聽聽聽聽聽聽聽聽聽聽聽聽vg.setDoc(ba);
聽聽聽聽聽聽聽聽聽聽聽聽vg.parse(false);
聽聽聽聽聽聽聽聽聽聽聽聽VTDNav vn = vg.getNav();
聽聽聽聽聽聽聽聽聽聽聽聽if (vn.matchElement("purchaseOrder")){
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(" orderDate==>"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ vn.toString(vn.getAttrVal("orderDate")));
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if (vn.toElement(VTDNav.FIRST_CHILD,"item")){
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if (vn.toElement(VTDNav.FIRST_CHILD)){
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽do {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.print( vn.toString(vn.getCurrentIndex()));
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.print("==>");
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println( vn.toString(vn.getText()));
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽} while(vn.toElement(VTDNav.NEXT_SIBLING));
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽catch (Exception e){
聽聽聽聽聽聽聽聽聽聽聽聽System.out.println("exception occurred ==>"+e);
聽聽聽聽聽聽聽聽}
聽聽聽聽}
}
瀹炵幇鍚屾牱鍔熻兘鐨凞OM鐗堟湰鐨勭▼搴忥細import java.io.*;
import org.w3c.dom.*;
import org.w3c.*;
import javax.xml.parsers.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
public class use_dom {
聽聽聽聽public static void main(String[] args){
聽聽聽聽聽聽聽聽try{
聽聽聽聽聽聽聽聽聽聽聽聽DocumentBuilderFactory factory =
聽聽聽聽聽聽聽聽聽聽聽聽DocumentBuilderFactory.newInstance();
聽聽聽聽聽聽聽聽聽聽聽聽DocumentBuilder parser = factory.newDocumentBuilder();
聽聽聽聽聽聽聽聽聽聽聽聽Document d= parser.parse("test.xml");
聽聽聽聽聽聽聽聽聽聽聽聽Element root = d.getDocumentElement();
聽聽聽聽聽聽聽聽聽聽聽聽if (root.getNodeName().compareTo("purchaseOrder")==0){
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(" orderDate==> "
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ root.getAttribute("orderDate"));
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Node n = root.getFirstChild();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if (n != null){
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽do {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if (n.getNodeType() == Node.ELEMENT_NODE
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽&& n.getNodeName().compareTo("item")==0){
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Node n2 = n.getFirstChild();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if (n2!=null){
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽do {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if (n2.getNodeType()
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽== Node.ELEMENT_NODE){聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽n2.getNodeName()
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ "==>" +
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽n2.getFirstChild().getNodeValue()
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}while((n2=n2.getNextSibling())!=null);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}while ((n=n.getNextSibling()) != null );
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽catch (Exception e){
聽聽聽聽聽聽聽聽聽聽聽聽System.out.println("exception occurred ==>"+e);
聽聽聽聽聽聽聽聽}聽聽聽聽
聽聽聽聽}
}
鍍忎互涓婃墍灞曠ず鐨勯偅鏍鳳紝VTD-XML浣跨敤鍩轟簬娓告爣鐨凙PI鏉ヨ闂甔ML灞傛緇撴瀯銆傜浉姣斾箣涓嬶紝DOM API閫氳繃璇鋒眰瀵硅薄鐨勫紩鐢ㄦ潵杈炬垚鍚屾牱鐩爣銆俈TD-XML鐨勯」鐩綉绔欐彁渚涙洿澶氳緇嗙殑鎶鏈祫鏂欏拰紺轟緥紼嬪簭銆?br />
VTD-XML鐨勫熀鍑嗘祴璇?/span>
涓嬮潰錛屾垜浠潵姣旇緝涓涓媀TD-XML涓浜涙祦琛岀殑XML瑙f瀽鍣ㄧ殑鎬ц兘鍜屽唴瀛樺崰鐢ㄦ儏鍐點傚煎緱娉ㄦ剰鐨勬槸錛屽鏁板寘鍚熀鍑嗘祴璇曟暟鎹殑鏂囩珷錛屽Dennis Sosnoski浜?002騫?鏈堝彂琛ㄥ湪JavaWorld涓婄殑鈥淴ML Documents on the Run鈥濓紝閮芥槸澶氬勾鍓嶇殑鏂囩珷銆傝嚜閭d互鍚庯紝濡傛懇灝斿畾寰嬫墍紺猴紝鏇村ソ鏇村揩鐨勭‖浠跺ぇ閲忔秾鐜板茍瓚婃潵瓚婁究瀹溿傚悓鏃訛紝XML瑙f瀽涓嶫VM鎶鏈篃騫舵湭姝㈡涓嶅墠鈥曗曞湪涓浜涘叧閿鍩熷仛鍑轟簡鏀硅繘銆?br />
嫻嬭瘯璁劇疆
嫻嬭瘯騫沖彴鏄疭ony VAIO絎旇鏈數鑴戯紝浣跨敤Pentium M 1.7 GHz澶勭悊鍣紙2MB L2 cache錛夛紝512MB DDR2鍐呭瓨銆傚墠绔葷嚎棰戠巼涓?00MHz銆傛搷浣滅郴緇熶負Windows XP Professional Edition with Services pack 2銆侸VM鐗堟湰涓?.5.0_06銆?br />瀵逛互涓媂ML瑙f瀽鍣ㄧ殑鏈鏂扮増鏈繘琛屼簡鍩哄噯嫻嬭瘯錛?br />*Xerces DOM 2.7.1, 甯︽湁鍙婁笉甯︽湁寤惰繜鑺傜偣鎵╁睍(deferred node expansion)
*Xerces SAX 2.7.1
*Piccolo SAX 1.04
*XPP3 1.1.3.4.O
*VTD-XML 1.5, 甯︽湁鍙婁笉甯︽湁緙撳啿閲嶇敤
鍦ㄦ祴璇曚腑鎴戜嬌鐢ㄤ簡澶ч噺涓嶅悓澶у皬鍜屼笉鍚屽鏉傜▼搴︾殑XML鏂囨。銆備粠鏂囨。澶у皬涓婏紝鎴戞妸瀹冧滑鍒嗕負涓夌被錛氬皬鏂囦歡錛堝皬浜?0KB錛夛紱涓枃浠訛紙10KB鑷?MB錛夛紱澶ф枃浠訛紙澶т簬1MB錛夈?br />鍦ㄥ叏閮ㄧ殑鎬ц兘搴﹂噺涓垜閮戒嬌鐢ㄤ簡鏈嶅姟鍣ㄧ殑JVM鏉ヨ幏鍙栨渶楂樻ц兘銆傚湪榪欎簺嫻嬭瘯涓紝鍩哄噯嫻嬭瘯紼嬪簭棣栧厛浼氬嬈¤В鏋愭垨璁塊棶鏂囨。錛屼嬌JVM瀵瑰瓧鑺傜爜榪涜鍗蟲椂鍔ㄦ佷紭鍖栵紝涔嬪悗鎵嶅彇寰楁ц兘鐨勫鉤鍧囧間綔涓烘渶緇堢粨鏋溿備負浜嗗噺灝戠敱浜庣鐩業O瀵艱嚧鐨勬椂闂村樊鍒紝鍩哄噯嫻嬭瘯紼嬪簭鍦ㄦ祴璇曡繍琛屼箣鍓嶅凡緇忔妸XML鏂囦歡璇誨叆鍒板唴瀛樹腑銆?br />
娉ㄦ剰錛氭湁鍏磋叮鐨勮鑰呭彲浠ヤ粠璧勬簮涓嬭澆鍩哄噯嫻嬭瘯紼嬪簭銆?br />
鍚炲悙閲忓姣旇В鏋?/strong>
鏈妭鍦ㄥ歡榪熸椂闂村拰鍚炲悙閲忎笂瀵筙ML瑙f瀽鎬ц兘榪涜鎻忚堪銆傝娉ㄦ剰鐨勬槸VTD-XML涓嶥OM鍙洿鎺ヨ繘琛屾瘮杈冿紝鑰屼笌SAX鎴朠ull鐩存帴瀵規瘮灝卞緢涓嶅叕騫籌紝鍥犱負瀹冧滑涓嶅湪鍐呭瓨涓瀯寤轟換浣曞眰嬈$粨鏋勩傚洜姝AX鍜孭ull鐨勬ц兘鍦ㄦ鍙綔涓洪澶栧弬鑰冦?br />鍚炲悙閲?br />
鍥?1. 灝忔枃浠?
聽聽聽聽
鍥?2. 涓枃浠?
聽聽聽聽
鍥?3. 澶ф枃浠?
寤惰繜鏃墮棿瀵規瘮
琛?1. 灝忔枃浠?br />
琛?2. 涓枃浠?br />
琛?3. 澶ф枃浠?br />
鍐呭瓨鍗犵敤鐜囧姣?br />鍥犱負SAX鍜孭ull涓嶅湪鍐呭瓨涓瀯寤轟換浣曟暟鎹粨鏋勶紝鎵浠ヨ繖欏規祴璇曞彧鏈変笌DOM鐨勫姣旀墠鏈夋剰涔夈傚洜姝わ紝鏈妭瀵瑰嶅姞緋繪暟(multiplying factor)榪涜琛¢噺錛岃緋繪暟涓哄唴瀛樺崰鐢ㄧ巼涓庡ぇ鏂囦歡鐨勬枃浠跺ぇ灝忎箣姣旓紙鍐呭瓨鍗犵敤瀵瑰ぇ鏂囦歡鐗瑰埆閲嶈錛夈?br />
鍥?4.
璁塊棶鎬ц兘瀵規瘮
鏈妭浠庡歡榪熸椂闂翠笂灞曠ずVTD-XML涓嶥OM 鐨勮闂ц兘銆傚歡榪熸椂闂存槸鎸囪闂枃妗d腑姣忎釜鑺傜偣鎵鑺辯殑鏃墮棿銆備負浜嗛亶鍘嗘墍鏈夎妭鐐癸紝DOM渚濊禆浜巒odeInterator鎺ュ彛錛岃孷TD-XML鍒欒皟鐢ˋutoPilot綾葷殑鎴愬憳鏂規硶selectElement(鈥?涓巌terate(鈥?銆傚鎵棰勬湡鐨勪竴鏍鳳紝璁塊棶閫熷害姣旇В鏋愰熷害瑕佸揩寰楀銆傚VTD-XML錛岃闂椂闂村紑閿鍦ㄨВ鏋愭椂闂村紑閿鐨?5%鍒?0%涔嬮棿銆傚DOM錛岃鏁板瓧涓?%鍒?%銆傝繖騫朵笉璇存槑VTD-XML鐨勮闂熷害鎱簬DOM銆傝繖瀹屽叏鏄洜涓篤TD-XML鏈夌潃闈炲父蹇殑瑙f瀽閫熷害銆?br />
琛?4. 灝忔枃浠?br />
琛?5. 涓枃浠?br />
琛?6. 澶ф枃浠?br />
緇撴灉鍒嗘瀽
鍦―ennis Sosnoski鍥涘勾鍓嶅彂琛ㄤ簬JavaWorld鐨勬枃绔犱腑錛孭iccolo鏄紬澶歋AX瀹炵幇涓殑璧㈠銆傜幇鍦ㄨ繖寰楀埌浜嗘敼鍙橈細鏈鏂扮殑Xerces鍑昏觸浼楀瀵規墜鎴愪負鎬ц兘鏈濂界殑SAX瑙f瀽鍣ㄣ傛祴璇曠粨鏋滀篃鏄劇ず錛屼笌Xerces鐩告瘮錛孹PP3涔熸湁鐩稿綋涓嶉敊鐨勬ц兘錛屼笉姣斿墠鑰呯浉宸緢澶氥?br />鍙﹀錛屾湁瓚g殑鏄紝褰撴枃浠惰緝灝忔椂錛孌OM涓嶴AX鐨勮В鏋愭ц兘宸窛騫朵笉鍍忓湪瑙f瀽澶ф枃浠舵椂鐨勭浉宸偅涔堝ぇ銆傚湪灝忔枃浠剁殑鎯呭喌涓嬶紝DOM鐨勫歡榪熻妭鐐規墿灞曞鑷存瘮浣跨敤瀹屽叏鑺傜偣鎵╁睍瑕佸樊鐨勮В鏋愭ц兘銆?br />
鑰孷TD-XML鐨勫嚭浼楁ц兘浣垮畠瀹屽叏鑳滆繃鍏朵粬浠諱綍瑙f瀽鍣紝榪欎嬌瀹冭嚜鎴愪竴綰с傜湡姝g殑姣旇緝鍙槸瀛樺湪浜庝嬌鐢ㄧ紦鍐查噸鐢ㄧ殑VTD-XML鍙婁笉浣跨敤緙撳啿閲嶇敤鐨刅TD-XML涔嬮棿銆傚唴瀛樺崰鐢ㄧ巼涓婄殑閲嶅ぇ浼樺娍浣垮緱VTD-XML鍙互琚敤浜庡鐞嗗ぇXML鏂囨。錛屽茍涓斿浠繪剰澶у皬鐨勬枃浠墮兘鏈夎緝濂界殑鎬ц兘銆?br />
緇撹
VTD-XML鏄竴縐嶅叏鏂扮殑錛屼笅涓浠g殑XML瑙f瀽鍣ㄣ傚畠瑙e喅浜嗚澶氱洰鍓嶅洶鎵癉OM鍜孲AX鐨勯棶棰樸俈TD-XML楂樻ц兘涓庝綆鍐呭瓨鍗犵敤鐨勭粨鍚堟剰鍛崇潃錛氶鍏堬紝DRAM宸茬粡鐩稿綋渚垮疁錛屽鏋滀笉鏄畬鍏ㄦ病鏈夌┖闂村瓨鏀綳ML鏂囨。錛岄偅灝辨病鏈夊灝戠悊鐢變嬌鐢⊿AX錛涘叾嬈★紝浣跨敤VTD-XML浣垮緱搴旂敤鍙樺緱鏇村姞綆鍗曪紝鏇村揩銆傚畠瀵瑰悇縐嶅ぇ灝忕殑鏂囦歡鐨勯傚簲鎬э紝浣垮緱閫夋嫨涓涓悎閫傜殑XML澶勭悊妯″瀷鍙樺緱綆鍗曪紝鑰屽紑鍙戜漢鍛樹篃涓嶅繀鍐嶅湪瀹屽叏涓嶅悓鐨凞OM鍜孲AX涓繘琛屽垏鎹簡錛涙渶鍚庯紝VTD-XML鍙互涓洪暱涔呬互鏉ュXML鐨勪笉婊℃彁渚涗竴涓護浜轟俊鏈嶇殑絳旀銆傛瘮濡傦紝VTD-XML鍐呭緩浜嗘湰鍦癤ML绱㈠紩鐨勮兘鍔涳紝涔熻鍙互姘鎬箙鏀瑰彉璁や負XML閫熷害鎱㈢殑鐪嬫硶銆傛鐢變簬瀹冪殑鎬ц兘浼樺娍錛孷TD-XML搴旇鏍囧織鐫鈥?0鍊嶉焁ML鈥濇椂浠g殑鍒版潵銆傛洿閲嶈鐨勬槸錛孷TD-XML鐨勪笅涓绔欙紝鍙湪鍜昂涔嬮仴錛岄偅灝辨槸鈥?00鍊嶉焁ML鈥濄?/p>
*VTD-XML:http://vtd-xml.sf.net/
*Apache Axis FAQ:http://ws.apache.org/axis/faq.html#faq1
*涓嬭澆鍩哄噯嫻嬭瘯紼嬪簭:http://sourceforge.net/project/showfiles.php?group_id=110612
]]>
聽聽聽聽聽聽聽SAXBuilder sb = new SAXBuilder();
聽聽 try
聽聽聽聽聽 {聽聽聽聽聽聽聽
聽聽聽聽聽聽 Document doc = sb.build(path);
聽聽聽聽聽聽 Element root = doc.getRootElement();
聽聽聽聽聽聽 Element subroot=root.getChild("entity");
聽聽聽聽聽聽
聽聽聽聽聽聽 Element content=subroot.getChild("contents");
聽聽聽 聽
聽聽聽 聽 List entities=content.getChildren("entity");
聽聽聽 聽 for(int j=0;j<entities.size();j++)
聽聽聽 聽 {
聽聽聽 聽聽 Element _element=(Element)entities.get(j);
聽聽聽 聽聽 if(_element.getChild("nick").getText().equals(catalog))
聽聽聽 聽聽 {
聽聽聽 聽聽聽 System.out.println(_element.getChild("nick").getText());
聽聽聽 聽聽聽 System.out.println(_element.getChild("description").getText());
聽聽聽聽聽聽 聽聽聽 content.removeContent(_element);
聽聽聽聽聽聽聽聽聽聽 //_element.removeContent(_element);
聽聽聽聽聽聽聽聽聽聽 }
聽聽聽 聽 }
聽聽聽聽聽聽
聽聽聽聽聽聽聽聽 Format format = Format.getCompactFormat();
聽聽聽聽聽聽聽聽 format.setEncoding("UTF-8"); //璁劇疆xml鏂囦歡鐨勫瓧絎︿負UTF-8
聽聽聽聽聽聽聽聽 format.setIndent("聽聽聽 "); //璁劇疆xml鏂囦歡鐨勭緝榪涗負4涓┖鏍?/em>
聽聽聽聽聽聽聽聽 XMLOutputter xmlOutput = new XMLOutputter(format);
聽聽聽聽聽聽聽聽 xmlOutput.output(root, new FileOutputStream(path));
聽聽聽聽聽 }
聽聽聽 catch(Exception e)
聽聽聽 {
聽聽聽聽聽聽聽聽聽 e.printStackTrace();
聽聽聽 }
聽聽聽聽 }
XML鏂囦歡鐗囷細
聽<entity>
聽聽聽聽聽聽聽 <description>鏂囨。鐩綍綆$悊</description>
聽聽聽聽聽聽聽 <imageBase>images/globe.gif</imageBase>
聽聽聽聽聽聽聽 <imageOpen>images/globe_selected.gif</imageOpen>
聽聽聽聽聽聽聽 <contents>
聽聽聽聽聽聽聽聽聽聽聽 <entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <nick>1</nick>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <description>妗f綆$悊紼嬪簭</description>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageBase>images/book.gif</imageBase>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageOpen>images/bookOpen.gif</imageOpen>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <contents>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <nick>1</nick>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <description>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績妗f鏌ヨ鐧昏琛?lt;/description>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageBase>images/paper.gif</imageBase>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageOpen>images/paper.gif</imageOpen>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <title>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績妗f鏌ヨ鐧昏琛?lt;/title>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <dir>doc/1/1.doc</dir>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <nick>2</nick>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <description>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績妗f綆$悊紼嬪簭</description>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageBase>images/paper.gif</imageBase>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageOpen>images/paper.gif</imageOpen>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <title>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績妗f綆$悊紼嬪簭</title>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <dir>doc/1/2.doc</dir>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <nick>3</nick>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <description>lnic浜哄憳綆$悊鍔炴硶</description>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageBase>images/paper.gif</imageBase>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageOpen>images/paper.gif</imageOpen>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <title>lnic浜哄憳綆$悊鍔炴硶</title>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <dir>doc/1/3.txt</dir>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </contents>
聽聽聽聽聽聽聽聽聽聽聽 </entity>
聽聽聽聽聽聽聽聽聽聽聽 <entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <nick>2</nick>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <description>瀵瑰涓氬姟</description>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageBase>images/book.gif</imageBase>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageOpen>images/bookOpen.gif</imageOpen>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <contents>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <nick>1</nick>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <description>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績渚涘簲鍟嗚皟鏌ユ姤鍛?lt;/description>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageBase>images/paper.gif</imageBase>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageOpen>images/paper.gif</imageOpen>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <title>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績渚涘簲鍟嗚皟鏌ユ姤鍛?lt;/title>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <dir>doc/2/1.doc</dir>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <nick>2</nick>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <description>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績鍥芥湁璧勪駭鐢寵喘鍗?lt;/description>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageBase>images/paper.gif</imageBase>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageOpen>images/paper.gif</imageOpen>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <title>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績鍥芥湁璧勪駭鐢寵喘鍗?lt;/title>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <dir>doc/2/2.doc</dir>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <nick>3</nick>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <description>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績鍚堟牸渚涘簲鍟嗗悕褰?lt;/description>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageBase>images/paper.gif</imageBase>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageOpen>images/paper.gif</imageOpen>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <title>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績鍚堟牸渚涘簲鍟嗗悕褰?lt;/title>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <dir>doc/2/3.doc</dir>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <nick>4</nick>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <description>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績榪涜揣璐ㄩ噺楠屾敹璁″垝</description>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageBase>images/paper.gif</imageBase>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageOpen>images/paper.gif</imageOpen>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <title>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績榪涜揣璐ㄩ噺楠屾敹璁″垝</title>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <dir>doc/2/4.doc</dir>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <nick>5</nick>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <description>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績鍩硅鍗忚涔?lt;/description>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageBase>images/paper.gif</imageBase>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageOpen>images/paper.gif</imageOpen>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <title>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績鍩硅鍗忚涔?lt;/title>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <dir>doc/2/5.doc</dir>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <nick>6</nick>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <description>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績澶栬喘鐗╁搧楠屾敹鎶ュ憡</description>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageBase>images/paper.gif</imageBase>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageOpen>images/paper.gif</imageOpen>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <title>鍥藉Linux鎶鏈煿璁笌鎺ㄥ箍涓績澶栬喘鐗╁搧楠屾敹鎶ュ憡</title>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <dir>doc/2/6.doc</dir>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <nick>7</nick>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <description>lnic浜哄憳鍣ㄦ潗綆$悊鍔炴硶</description>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageBase>images/paper.gif</imageBase>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <imageOpen>images/paper.gif</imageOpen>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <title>lnic浜哄憳鍣ㄦ潗綆$悊鍔炴硶</title>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <dir>doc/2/7.doc</dir>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </entity>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </contents>
聽聽聽聽聽聽聽聽聽聽聽 </entity>
聽聽聽聽聽聽聽聽閿欒鍑虹幇鍦細 1銆?font color="#ff1493">content.removeContent(_element);
聽聽聽聽聽聽聽聽聽聽2銆?font color="#ffa500"> //_element.removeContent(_element);
鐢ㄧ2縐嶆柟娉曟昏揪涓嶅埌鏁堟灉錛屾悶浜嗗崐澶╂墠鏇存浜嗛敊璇?/font>
瑙e喅鏂規硶錛?br />1.鎸囧畾杈撳嚭鏂囨。綾誨瀷涓簒ml鏂囨。聽 (example:data.xsl)
聽<xsl:output method=xml聽 encoding=gb2312 media-type=text/xml />
2.鍦ㄦ柊鐨勭獥鍙f墦寮錛岀粰鑱旀帴澧炲姞灞炴?鎸囨槑鐩爣紿楀彛涓哄叾浠栫獥鍙B?(example:data2.xsl)
聽<xsl:attribute name=target>_blank</xsl:attribute>
examples:
/*** data.xml ***/
<?xml version=1.0 encoding=gb2312?>
<?xml-stylesheet type=text/xsl href=data.xsl?>
<root>
聽<search>
聽聽<url>http://www.google.com/search?q=</url>
聽聽<word>xml鏁版嵁</word>
聽</search>
聽<search>
聽聽<url>http://www1.baidu.com/baidu?word=</url>
聽聽<word>xml鏁版嵁</word>
聽</search>
聽<search>
聽聽<url>http://www.google.com/search?q=</url>
聽聽<word>鏋侀檺緙栫▼(xp)</word>
聽</search>
聽<search>
聽聽<url>http://www1.baidu.com/baidu?word=</url>
聽聽<word>鏋侀檺緙栫▼(xp)</word>
聽</search>
</root>
/*** data.xsl ***/
<?xml version=1.0 encoding=gb2312?>
<xsl:stylesheet version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
<!-- 鍘繪帀涓嬮潰涓鍙?灝嗗嚭鐜伴敊璇?-->
<xsl:output method=xml聽 encoding=gb2312 media-type=text/xml />
<xsl:template match=/>
聽<xsl:apply-templates />聽
</xsl:template>
<xsl:template match=search>
聽<xsl:element name=a>
聽聽<xsl:attribute name=href><xsl:value-of select=url /><xsl:value-of select=word /></xsl:attribute>
聽聽<xsl:value-of select=word />
聽</xsl:element>
聽<br />
</xsl:template>
</xsl:stylesheet>
/*** data2.xsl ***/
<?xml version=1.0 encoding=gb2312?>
<xsl:stylesheet version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
<xsl:template match=/>
聽<xsl:apply-templates />聽
</xsl:template>
<xsl:template match=search>
聽<xsl:element name=a>
聽聽<xsl:attribute name=href><xsl:value-of select=url /><xsl:value-of select=word /></xsl:attribute>
聽聽<!-- 鍘繪帀涓嬮潰涓鍙?灝嗗嚭鐜伴敊璇?-->
聽聽<xsl:attribute name=target>_blank</xsl:attribute>
聽聽<xsl:value-of select=word />
聽</xsl:element>
聽<br />
</xsl:template>
</xsl:stylesheet>