锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
1錛塂OM(JAXP Crimson瑙f瀽鍣?
DOM鏄敤涓庡鉤鍙板拰璇█鏃犲叧鐨勬柟寮忚〃紺篨ML鏂囨。鐨勫畼鏂筗3C鏍囧噯銆侱OM鏄互灞傛緇撴瀯緇勭粐鐨勮妭鐐規(guī)垨淇℃伅鐗囨柇鐨勯泦鍚堛傝繖涓眰嬈$粨鏋勫厑璁稿紑鍙戜漢鍛樺湪鏍?wèi)涓L壘鐗瑰畾淇℃伅銆傚垎鏋愯緇撴瀯閫氬父闇瑕佸姞杞芥暣涓枃妗e拰鏋勯犲眰嬈$粨鏋勶紝鐒跺悗鎵嶈兘鍋氫換浣曞伐浣溿傜敱浜庡畠鏄熀浜庝俊鎭眰嬈$殑錛屽洜鑰孌OM琚涓烘槸鍩轟簬鏍?wèi)鎴栧熮Z簬瀵硅薄鐨勩侱OM浠ュ強(qiáng)騫夸箟鐨勫熀浜庢爲(wèi)鐨勫鐞嗗叿鏈夊嚑涓紭鐐廣傞鍏堬紝鐢變簬鏍?wèi)鍦ㄥ唴瀛樹(shù)腑鏄寔涔呯殑锛屽洜姝ゅ彲浠ヤ慨鏀瑰畠浠ヤ究搴旂敤绋嬪簭鑳藉?guī)暟鎹拰緇撴瀯浣滃嚭鏇存敼銆傚畠榪樺彲浠ュ湪浠諱綍鏃跺欏湪鏍?wèi)涓笂涓嬪D埅錛岃屼笉鏄儚SAX閭f牱鏄竴嬈℃х殑澶勭悊銆侱OM浣跨敤璧鋒潵涔熻綆鍗曞緱澶氥?/p>
2錛塖AX
SAX澶勭悊鐨勪紭鐐歸潪甯哥被浼間簬嫻佸獟浣撶殑浼樼偣銆傚垎鏋愯兘澶熺珛鍗沖紑濮嬶紝鑰屼笉鏄瓑寰呮墍鏈夌殑鏁版嵁琚鐞嗐傝屼笖錛岀敱浜庡簲鐢ㄧ▼搴忓彧鏄湪璇誨彇鏁版嵁鏃舵鏌ユ暟鎹紝鍥犳涓嶉渶瑕佸皢鏁版嵁瀛樺偍鍦ㄥ唴瀛樹(shù)腑銆傝繖瀵逛簬澶у瀷鏂囨。鏉ヨ鏄釜宸ㄥぇ鐨勪紭鐐廣備簨瀹炰笂錛屽簲鐢ㄧ▼搴忕敋鑷充笉蹇呰В鏋愭暣涓枃妗o紱瀹冨彲浠ュ湪鏌愪釜鏉′歡寰楀埌婊¤凍鏃跺仠姝㈣В鏋愩備竴鑸潵璇達(dá)紝SAX榪樻瘮瀹冪殑鏇夸唬鑰匘OM蹇澶氥?
銆銆閫夋嫨DOM榪樻槸閫夋嫨SAX錛?瀵逛簬闇瑕佽嚜宸辯紪鍐欎唬鐮佹潵澶勭悊XML鏂囨。鐨勫紑鍙戜漢鍛樻潵璇達(dá)紝 閫夋嫨DOM榪樻槸SAX瑙f瀽妯″瀷鏄竴涓潪甯擱噸瑕佺殑璁捐鍐崇瓥銆?DOM閲囩敤寤虹珛鏍?wèi)迮灳l撴瀯鐨勬柟寮忚闂甔ML鏂囨。錛岃孲AX閲囩敤鐨勪簨浠舵ā鍨嬨?
銆銆DOM瑙f瀽鍣ㄦ妸XML鏂囨。杞寲涓轟竴涓寘鍚叾鍐呭鐨勬爲(wèi)錛屽茍鍙互瀵規(guī)爲(wèi)榪涜閬嶅巻銆傜敤DOM瑙f瀽妯″瀷鐨勪紭鐐規(guī)槸緙栫▼瀹規(guī)槗錛屽紑鍙戜漢鍛樺彧闇瑕佽皟鐢ㄥ緩鏍?wèi)鐨勬寚渥o(hù)錛岀劧鍚庡埄鐢╪avigation APIs璁塊棶鎵闇鐨勬爲(wèi)鑺傜偣鏉ュ畬鎴愪換鍔°傚彲浠ュ緢瀹規(guī)槗鐨勬坊鍔犲拰淇敼鏍?wèi)涓殑鍏冪礌銆傜劧鑰岀敱浜庝嬌鐢―OM瑙f瀽鍣ㄧ殑鏃跺欓渶瑕佸鐞嗘暣涓猉ML鏂囨。錛屾墍浠ュ鎬ц兘鍜屽唴瀛樼殑瑕佹眰姣旇緝楂橈紝灝ゅ叾鏄亣鍒板緢澶х殑XML鏂囦歡鐨勬椂鍊欍傜敱浜庡畠鐨勯亶鍘嗚兘鍔涳紝DOM瑙f瀽鍣ㄥ父鐢ㄤ簬XML鏂囨。闇瑕侀綣佺殑鏀瑰彉鐨勬湇鍔′腑銆?
銆銆SAX瑙f瀽鍣ㄩ噰鐢ㄤ簡(jiǎn)鍩轟簬浜嬩歡鐨勬ā鍨嬶紝瀹冨湪瑙f瀽XML鏂囨。鐨勬椂鍊欏彲浠ヨЕ鍙戜竴緋誨垪鐨勪簨浠訛紝褰撳彂鐜扮粰瀹氱殑tag鐨勬椂鍊欙紝瀹冨彲浠ユ縺媧諱竴涓洖璋冩柟娉曪紝鍛婅瘔璇ユ柟娉曞埗瀹氱殑鏍囩宸茬粡鎵懼埌銆係AX瀵瑰唴瀛樼殑瑕佹眰閫氬父浼?xì)姣旇緝浣庡Q屽洜涓哄畠璁╁紑鍙戜漢鍛樿嚜宸辨潵鍐沖畾鎵瑕佸鐞嗙殑tag銆傜壒鍒槸褰撳紑鍙戜漢鍛樺彧闇瑕佸鐞嗘枃妗d腑鎵鍖呭惈鐨勯儴鍒嗘暟鎹椂錛孲AX榪欑鎵╁睍鑳藉姏寰楀埌浜?jiǎn)鏇村ソ鐨勪綋鐜般備絾鐢⊿AX瑙f瀽鍣ㄧ殑鏃跺欑紪鐮佸伐浣滀細(xì)姣旇緝鍥伴毦錛岃屼笖寰堥毦鍚屾椂璁塊棶鍚屼竴涓枃妗d腑鐨勫澶勪笉鍚屾暟鎹?/p>
3錛塉DOM http://www.jdom.org/
JDOM鐨勭洰鐨勬槸鎴愪負(fù)Java鐗瑰畾鏂囨。妯″瀷錛屽畠綆鍖栦笌XML鐨勪氦浜掑茍涓旀瘮浣跨敤DOM瀹炵幇鏇村揩銆傜敱浜庢槸絎竴涓狫ava鐗瑰畾妯″瀷錛孞DOM涓鐩村緱鍒板ぇ鍔涙帹騫垮拰淇?jī)杩涖傛鍦ㄨ冭檻閫氳繃“Java瑙勮寖璇鋒眰JSR-102”灝嗗畠鏈緇堢敤浣?#8220;Java鏍囧噯鎵╁睍”銆備粠2000騫村垵灝卞凡緇忓紑濮嬩簡(jiǎn)JDOM寮鍙戙?/p>
銆銆JDOM涓嶥OM涓昏鏈変袱鏂歸潰涓嶅悓銆傞鍏堬紝JDOM浠呬嬌鐢ㄥ叿浣撶被鑰屼笉浣跨敤鎺ュ彛銆傝繖鍦ㄦ煇浜涙柟闈㈢畝鍖栦簡(jiǎn)API錛屼絾鏄篃闄愬埗浜?jiǎn)鐏祴z繪с傜浜岋紝API澶ч噺浣跨敤浜?jiǎn)Collections綾伙紝綆鍖栦簡(jiǎn)閭d簺宸茬粡鐔熸?zhèn)墭q欎簺綾葷殑Java寮鍙戣呯殑浣跨敤銆?/p>
銆銆JDOM鏂囨。澹版槑鍏剁洰鐨勬槸“浣跨敤20%(鎴栨洿灝?鐨勭簿鍔涜В鍐?0%(鎴栨洿澶?Java/XML闂”(鏍規(guī)嵁瀛︿範(fàn)鏇茬嚎鍋囧畾涓?0%)銆侸DOM瀵逛簬澶у鏁癑ava/XML搴旂敤紼嬪簭鏉ヨ褰撶劧鏄湁鐢ㄧ殑錛屽茍涓斿ぇ澶氭暟寮鍙戣呭彂鐜癆PI姣擠OM瀹規(guī)槗鐞嗚В寰楀銆侸DOM榪樺寘鎷紼嬪簭琛屼負(fù)鐨勭浉褰撳箍娉涙鏌ヤ互闃叉鐢ㄦ埛鍋氫換浣曞湪XML涓棤鎰忎箟鐨勪簨銆傜劧鑰岋紝瀹冧粛闇瑕佹?zhèn)ㄥ厖鍒嗙悊瑙ML浠ヤ究鍋氫竴浜涜秴鍑哄熀鏈殑宸ヤ綔(鎴栬呯敋鑷崇悊瑙f煇浜涙儏鍐典笅鐨勯敊璇?銆傝繖涔熻鏄瘮瀛︿範(fàn)DOM鎴朖DOM鎺ュ彛閮芥洿鏈夋剰涔夌殑宸ヤ綔銆?/p>
銆銆JDOM鑷韓涓嶅寘鍚В鏋愬櫒銆傚畠閫氬父浣跨敤SAX2瑙f瀽鍣ㄦ潵瑙f瀽鍜岄獙璇佽緭鍏ML鏂囨。(灝界瀹冭繕鍙互灝嗕互鍓嶆瀯閫犵殑DOM琛ㄧず浣滀負(fù)杈撳叆)銆傚畠鍖呭惈涓浜涜漿鎹㈠櫒浠ュ皢JDOM琛ㄧず杈撳嚭鎴怱AX2浜嬩歡嫻併丏OM妯″瀷鎴朮ML鏂囨湰鏂囨。銆侸DOM鏄湪Apache璁稿彲璇佸彉?shù)綋涓嬪彂甯冪殑寮鏀炬簮鐮併?/p>
4錛塂OM4J http://dom4j.sourceforge.net/
铏界劧DOM4J浠h〃浜?jiǎn)瀹屽叏鐙珛鐨勫紑鍙戠粨鏋滐紝浣嗘渶鍒濓紝瀹冩槸JDOM鐨勪竴縐嶆櫤鑳藉垎鏀傚畠鍚堝茍浜?jiǎn)璁稿瓒呭嚭鍩烘湰XML鏂囨。琛ㄧず鐨勫姛鑳斤紝鍖呮嫭闆嗘垚鐨刋Path鏀寔銆乆ML Schema鏀寔浠ュ強(qiáng)鐢ㄤ簬澶ф枃妗f垨嫻佸寲鏂囨。鐨勫熀浜庝簨浠剁殑澶勭悊銆傚畠榪樻彁渚涗簡(jiǎn)鏋勫緩鏂囨。琛ㄧず鐨勯夐」錛屽畠閫氳繃DOM4J API鍜屾爣鍑咲OM鎺ュ彛鍏鋒湁騫惰璁塊棶鍔熻兘銆備粠2000涓嬪崐騫村紑濮嬶紝瀹冨氨涓鐩村浜庡紑鍙戜箣涓?/p>
銆銆涓烘敮鎸佹墍鏈夎繖浜涘姛鑳斤紝DOM4J浣跨敤鎺ュ彛鍜屾娊璞″熀鏈被鏂規(guī)硶銆侱OM4J澶ч噺浣跨敤浜?jiǎn)API涓殑Collections綾伙紝浣嗘槸鍦ㄨ澶氭儏鍐典笅錛屽畠榪樻彁渚涗竴浜涙浛浠f柟娉曚互鍏佽鏇村ソ鐨勬ц兘鎴栨洿鐩存帴鐨勭紪鐮佹柟娉曘傜洿鎺ュソ澶勬槸錛岃櫧鐒禗OM4J浠樺嚭浜?jiǎn)鏇村鏉傜殑API鐨勪唬浠鳳紝浣嗘槸瀹冩彁渚涗簡(jiǎn)姣擩DOM澶у緱澶氱殑鐏墊椿鎬с?/p>
銆銆鍦ㄦ坊鍔犵伒媧繪с乆Path闆嗘垚鍜屽澶ф枃妗e鐞嗙殑鐩爣鏃訛紝DOM4J鐨勭洰鏍囦笌JDOM鏄竴鏍風(fēng)殑錛氶拡瀵笿ava寮鍙戣呯殑鏄撶敤鎬у拰鐩磋鎿嶄綔銆傚畠榪樿嚧鍔涗簬鎴愪負(fù)姣擩DOM鏇村畬鏁寸殑瑙e喅鏂規(guī)錛屽疄鐜板湪鏈川涓婂鐞嗘墍鏈塉ava/XML闂鐨勭洰鏍囥傚湪瀹屾垚璇ョ洰鏍囨椂錛屽畠姣擩DOM鏇村皯寮鴻皟闃叉涓嶆紜殑搴旂敤紼嬪簭琛屼負(fù)銆?/p>
銆銆DOM4J鏄竴涓潪甯擱潪甯鎬紭縐鐨凧ava XML API錛屽叿鏈夋ц兘浼樺紓銆佸姛鑳藉己澶у拰鏋佺鏄撶敤浣跨敤鐨勭壒鐐癸紝鍚屾椂瀹冧篃鏄竴涓紑鏀炬簮浠g爜鐨勮蔣浠躲傚浠婁綘鍙互鐪嬪埌瓚婃潵瓚婂鐨凧ava杞歡閮藉湪浣跨敤DOM4J鏉ヨ鍐橷ML錛岀壒鍒煎緱涓鎻愮殑鏄繛Sun鐨凧AXM涔熷湪鐢―OM4J銆?/p>
2.. 姣旇緝
1錛塂OM4J鎬ц兘鏈濂斤紝榪濻un鐨凧AXM涔熷湪鐢―OM4J銆傜洰鍓嶈澶氬紑婧愰」鐩腑澶ч噺閲囩敤DOM4J錛屼緥濡傚ぇ鍚嶉紟榧庣殑Hibernate涔熺敤DOM4J鏉ヨ鍙朮ML閰嶇疆鏂囦歡銆傚鏋滀笉鑰冭檻鍙Щ妞嶆э紝閭e氨閲囩敤DOM4J.
2錛塉DOM鍜孌OM鍦ㄦц兘嫻嬭瘯鏃惰〃鐜頒笉浣籌紝鍦ㄦ祴璇?0M鏂囨。鏃跺唴瀛樻孩鍑恒傚湪灝忔枃妗f儏鍐典笅榪樺煎緱鑰冭檻浣跨敤DOM鍜孞DOM銆傝櫧鐒禞DOM鐨勫紑鍙戣呭凡緇忚鏄庝粬浠湡鏈涘湪姝e紡鍙戣鐗堝墠涓撴敞鎬ц兘闂錛屼絾鏄粠鎬ц兘瑙傜偣鏉ョ湅錛屽畠紜疄娌℃湁鍊煎緱鎺ㄨ崘涔嬪銆傚彟澶栵紝DOM浠嶆槸涓涓潪甯稿ソ鐨勯夋嫨銆侱OM瀹炵幇騫挎硾搴旂敤浜庡縐嶇紪紼嬭璦銆傚畠榪樻槸璁稿鍏跺畠涓嶺ML鐩稿叧鐨勬爣鍑嗙殑鍩虹錛屽洜涓哄畠姝e紡鑾峰緱W3C鎺ㄨ崘(涓庡熀浜庨潪鏍囧噯鐨凧ava妯″瀷鐩稿)錛屾墍浠ュ湪鏌愪簺綾誨瀷鐨勯」鐩腑鍙兘涔熼渶瑕佸畠(濡傚湪JavaScript涓嬌鐢―OM)銆?/p>
3錛塖AX琛ㄧ幇杈冨ソ錛岃繖瑕佷緷璧栦簬瀹冪壒瀹氱殑瑙f瀽鏂瑰紡錛嶄簨浠墮┍鍔ㄣ備竴涓猄AX媯(gè)嫻嬪嵆灝嗗埌鏉ョ殑XML嫻侊紝浣嗗茍娌℃湁杞藉叆鍒板唴瀛?褰撶劧褰揦ML嫻佽璇誨叆鏃訛紝浼?xì)鏈夐儴鍒嗘枃妗f殏鏃堕殣钘忓湪鍐呭瓨?shù)腑)銆?/p>
3. 鍥涚xml鎿嶄綔鏂瑰紡鐨勫熀鏈嬌鐢ㄦ柟娉?/p>
xml鏂囦歡錛?/p>
<?xml version="1.0" encoding="utf-8" ?>
<Result>
<VALUE>
<NO DATE="2005">A1</NO>
<ADDR>GZ</ADDR>
</VALUE>
<VALUE>
<NO DATE="2004">A2</NO>
<ADDR>XG</ADDR>
</VALUE>
</Result>
1錛塂OM
import java.io.*;
import java.util.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class MyXMLReader{
銆public static void main(String arge[]){
銆銆long lasting =System.currentTimeMillis();
銆銆try{
銆銆銆File f=new File("data_10k.xml");
銆銆銆DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
銆銆銆DocumentBuilder builder=factory.newDocumentBuilder();
銆銆銆Document doc = builder.parse(f);
銆銆銆NodeList nl = doc.getElementsByTagName("VALUE");
銆銆銆for (int i=0;i錛渘l.getLength();i++){
銆銆銆銆System.out.print("杞︾墝鍙風(fēng)爜:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
銆銆銆銆System.out.println("杞︿富鍦板潃:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
銆 銆}
銆銆}catch(Exception e){
銆銆銆e.printStackTrace();
}
2錛塖AX
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;
public class MyXMLReader extends DefaultHandler {
銆java.util.Stack tags = new java.util.Stack();
銆public MyXMLReader() {
銆銆super();
}
銆public static void main(String args[]) {
銆銆long lasting = System.currentTimeMillis();
銆銆try {
銆銆銆SAXParserFactory sf = SAXParserFactory.newInstance();
銆銆銆SAXParser sp = sf.newSAXParser();
銆銆銆MyXMLReader reader = new MyXMLReader();
銆銆銆sp.parse(new InputSource("data_10k.xml"), reader);
銆銆} catch (Exception e) {
銆銆銆e.printStackTrace();
銆銆}
銆銆System.out.println("榪愯鏃墮棿錛? + (System.currentTimeMillis() - lasting) + "姣");}
銆銆public void characters(char ch[], int start, int length) throws SAXException {
銆銆String tag = (String) tags.peek();
銆銆if (tag.equals("NO")) {
銆銆銆System.out.print("杞︾墝鍙風(fēng)爜錛? + new String(ch, start, length));
}
if (tag.equals("ADDR")) {
銆銆System.out.println("鍦板潃:" + new String(ch, start, length));
}
}
銆銆public void startElement(String uri,String localName,String qName,Attributes attrs) {
銆銆tags.push(qName);}
}
3錛?JDOM
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
public class MyXMLReader {
銆public static void main(String arge[]) {
銆銆long lasting = System.currentTimeMillis();
銆銆try {
銆銆銆SAXBuilder builder = new SAXBuilder();
銆銆銆Document doc = builder.build(new File("data_10k.xml"));
銆銆銆Element foo = doc.getRootElement();
銆銆銆List allChildren = foo.getChildren();
銆銆銆for(int i=0;i錛渁llChildren.size();i++) {
銆銆銆銆System.out.print("杞︾墝鍙風(fēng)爜:" + ((Element)allChildren.get(i)).getChild("NO").getText());
銆銆銆銆System.out.println("杞︿富鍦板潃:" + ((Element)allChildren.get(i)).getChild("ADDR").getText());
銆銆銆}
銆銆} catch (Exception e) {
銆銆銆e.printStackTrace();
}
}
4錛塂OM4J
import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*;
public class MyXMLReader {
銆public static void main(String arge[]) {
銆銆long lasting = System.currentTimeMillis();
銆銆try {
銆銆銆File f = new File("data_10k.xml");
銆銆銆SAXReader reader = new SAXReader();
銆銆銆Document doc = reader.read(f);
銆銆銆Element root = doc.getRootElement();
銆銆銆Element foo;
銆銆銆for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) {
銆銆銆銆foo = (Element) i.next();
銆銆銆銆System.out.print("杞︾墝鍙風(fēng)爜:" + foo.elementText("NO"));
銆銆銆銆System.out.println("杞︿富鍦板潃:" + foo.elementText("ADDR"));
銆銆銆}
銆銆} catch (Exception e) {
銆銆銆e.printStackTrace();
}
}