1銆倄ml鑳屾櫙
鏍煎紡鑹ソ鐨勶紙web-fromed錛墄ml鍙互涓嶉渶瑕佹枃妗g被鍨嬪畾涔夛紙DTD錛夛紝鍙婊¤凍鍩烘湰鐨剎ml鏍煎紡瑙勮寖?yōu)鍙互璁や负鏄牸寮忚壇濂界殑xml鏂囨。銆備絾鏄牸寮忔爣鍑嗭紝鍙兘璇存槑鍏冪礌銆佹爣絳俱佹牸寮忔槸鍚堟硶鐨勶紝騫朵笉鑳借鏄庡厓绱犳槸鏈夋剰涔夌殑錛屾垨鑰呰瑙勮寖鐨勩?/p>
鏈夋晥鐨剎ml鏂囨。錛岄鍏堣姹傛槸鏍煎紡鑹ソ鐨勬枃妗o紝鍚屾椂閬靛畧鐩稿簲鐨凞TD鏂囦歡綰︽潫銆?/p>
2銆倄ml瑙f瀽
xml鏂囨。瑙f瀽鐨勫ぇ鑷翠嬌鐢ㄨ繃紼嬪涓嬪浘錛?/p>
鐢眡ml瑙f瀽鍣ㄨВ鏋愬拰鎿嶄綔鎸囧畾鐨剎ml鏂囨。錛岀劧鍚庢彁渚涙帴鍙d緵搴旂敤紼嬪簭浣跨敤銆傚鏋滆В鏋愬櫒涓嶅悓錛岄偅涔堟彁渚涚殑鎺ュ彛灝辨湁鍙兘涓嶅悓銆傚簡騫哥殑鏄紝鐩墠鎵鏈夌殑xml瑙f瀽鍣ㄥ涓ゅ鏍囧噯鐨刟pi鎻愪緵浜嗘敮鎸侊紝榪欎袱濂楁爣鍑哸pi灝辨槸dom鍜宻ax銆?/p>
dom錛氬嵆document object model錛屾枃妗e璞℃ā鍨嬶紝瀹冩槸w3c緇勭粐鎺ㄨ崘鐨勫鐞唜ml鐨勬爣鍑嗘帴鍙c俤om鏄熀浜巟ml鏂囨。緇撴瀯鏍?wèi)鐨勮В鏋愩?/p>
sax錛氬嵆simple api for xml錛屽畠鏄潪瀹樻柟鐨勩亁ml紺懼尯浜嬪疄涓婄殑鏍囧噯銆俿ax鏄熀浜庝簨浠舵祦鐨勮В鏋愩?/p>
dom鍜宻ax鍙槸瀹氫箟浜嗕竴浜涙帴鍙d互鍙婃煇浜涙帴鍙g殑緙虹渷瀹炵幇錛屽簲鐢ㄧ▼搴忚鎯沖埄鐢╠om鎴杝ax璁塊棶xml鏂囨。錛岃繕闇瑕佺湡姝e疄鐜癲om鎴杝ax鎺ュ彛鐨剎ml瑙f瀽鍣ㄣ俛pache鐨剎erces鏄竴涓嬌鐢ㄩ潪甯稿箍娉涚殑瑙f瀽鍣紝瀹冨疄鐜頒簡dom鍜宻ax鐨勮皟鐢ㄦ帴鍙o紝騫舵彁渚涗簡澶氱璇█鐨勫疄鐜扮増鏈?/p>
3銆俲ava璇█瀵箈ml鏂囨。鐨勮В鏋?/p>
棣栧厛浠嬬粛jaxp錛?/p>
鍩轟簬dom鎴杝ax鎻愪緵鐨刟pi鎺ュ彛錛屼嬌鐢ㄧ浉搴旂殑瑙f瀽鍣ㄥ疄鐜扮被鎴戜滑宸茬粡鍙互瀵箈ml榪涜瑙f瀽澶勭悊浜嗐傚涓嬫墍紺猴細
org.xml.sax.XMLReader sp=new org.apache.xerces.parser.SAXParser();
FileInputStream fis=new FileInputStream(“hello.xml”);
InputSource is=new InputSource(fis);
sp.setContentHandler(new MyConentHandler());
sp.parse(is);
涓轟簡灞忚斀xml瑙f瀽鍣ㄧ殑鍙樺寲瀵逛唬鐮佺殑褰卞搷錛宩ava鎻愪緵浜嗕竴濂楁爣鍑嗙殑澶勭悊xml鏂囦歡鐨勬帴鍙o紙瀹為檯涓婃槸涓浜涙娊璞$殑宸ュ巶綾伙級錛屼嬌寰梛ava寮鍙戜漢鍛樹互涓縐嶆爣鍑嗙殑鏂瑰紡瀵箈ml榪涜緙栫▼錛屽嵆jaxp錛坖ava api for xml processing錛夈俲axp娌℃湁鎻愪緵瑙f瀽xml鐨勬柊鏂規(guī)硶錛屽彧鏄湪瑙f瀽鍣ㄤ箣涓婂皝瑁呬竴涓娊璞″眰銆傚湪jdk1.6鐨勬枃妗d腑錛屾垜浠彲浠ョ湅鍒癹avax.xml,org.w3c.dom,org.xml.sax鍖呭強鍏跺瓙鍖呴兘灞炰簬jaxp鐨勯儴鍒嗐俲axp鐢辨帴鍙c佹娊璞$被鍜屼竴浜涜緟鍔╃被緇勬垚錛岀鍚坖axp瑙勮寖鐨勮В鏋愬櫒瀹炵幇鍏朵腑鐨勬帴鍙e拰鎶借薄綾伙紝寮鍙戞椂鍙渶瑕佷嬌鐢╦axp鐨刟pi緙栫▼錛屽簳灞傜殑瑙f瀽鍣ㄥ寮鍙戣呮椂閫忔槑鐨勶紝鍙互闅忔剰鐨勫垏鎹€?/p>
閭d箞jaxp鍑虹幇鍚庯紝java搴旂敤紼嬪簭澶勭悊xml鏂囨。鐨勮繃紼嬪氨濡備笅鍥撅細
閭e疄闄呴噰鐢ㄥ摢縐嶈В鏋愬櫒鐨刯axp瀹炵幇錛屽彲浠ラ氳繃緋葷粺灞炴с乸roperties鏂囦歡絳夋柟寮忔潵閰嶇疆銆?/p>
涓嬮潰鍏蜂綋浠嬬粛鍑犵java瑙f瀽xml鐨勬柟娉曪細
3.1 DOM鏂瑰紡錛坖axp錛?/p>
鍦╦avax.xml.parsers鍖呬腑錛屽畾涔変簡dom鐨勬娊璞″伐鍘傜被DocumentBuilderFactory錛屽湪榪欎釜綾諱腑鏈変竴涓潤鎬佺殑鏂規(guī)硶newInstance()錛岄氳繃瀹冧駭鐢熶竴涓狣ocumentBuilderFactory鐨勫疄渚嬨傚墠闈㈡彁鍒拌繃jaxp緙栫▼錛岃В鏋愬櫒鎻愪緵鍟嗗繀欏葷戶鎵胯鎶借薄綾諱駭鐢熶竴涓叿浣撶殑瑙f瀽鍣ㄥ伐鍘傦紝鐒跺悗鐢辮繖涓伐鍘傜被瀹炰緥鍑轟竴涓В鏋愬櫒瀵硅薄錛屽啀閫氳繃璇ヨВ鏋愬櫒瀵硅薄澶勭悊xml鏂囨。銆傞偅涔堣繖涓猲ewInstance鏂規(guī)硶灝辨槸鐢ㄦ潵浜х敓涓涓叿浣撶殑瑙f瀽鍣ㄥ伐鍘傜被瀹炰緥錛屾煡鎵劇敓鎴愯В鏋愬櫒宸ュ巶綾誨疄渚嬬殑鏂瑰紡鍙弬鑰僯dk鏂囨。銆?/p>
鍦ㄨ幏鍙栧埌瑙f瀽鍣ㄥ伐鍘傜被瀹炰緥綾諱箣鍚庯紝灝卞彲浠ヨ皟鐢╪ewDocumentBuilder()鏂規(guī)硶鍒涘緩涓涓猟om瑙f瀽鍣ㄥ疄渚嬶紱dom瑙f瀽鍣ㄥ疄渚嬪氨鍙互璋冪敤parser()鏂規(guī)硶鑾峰彇鏁翠釜xml闂瓟鐨凞ocument瀵硅薄銆?/p>
3 .2 SAX鏂瑰紡錛坖axp錛?/p>
sax鏄熀浜庝簨浠墮┍鍔ㄧ殑api錛宻ax瑙f瀽xml鏂囨。鏃朵細鍚戜簨浠跺鐞嗗櫒鍙戦佷笉鍚岀殑浜嬩歡銆俿ax瑙f瀽鍣ㄦ帴鍙e拰浜嬩歡澶勭悊鍣ㄦ帴鍙i兘鍦╫rg.xml.sax鍖呬腑瀹氫箟銆俋MLReader鍗充負(fù)sax瀹氫箟鐨勮В鏋愬櫒鎺ュ彛錛岀敱瑙f瀽鍣ㄦ彁渚涘晢瀹炵幇璇ュ熷彛錛屽簲鐢ㄧ▼搴忛渶瑕佸仛鐨勬槸緙栧啓涓涓簨浠跺鐞嗗櫒銆傚彲浠ラ氳繃XMLReader鐨剆etContentHandler()鏂規(guī)硶鏉ヨ緗竴涓簨浠跺鐞嗗櫒鐨勫疄渚嬨?/p>
涓巇om綾諱技錛宩axp涔熶負(fù)sax瑙f瀽鍣ㄦ彁渚涗簡鎶借薄宸ュ巶綾籗AXParserFactory綾伙紝sax瑙f瀽鍣ㄥ伐鍘傜被鐨勫疄渚嬩笌dom瑙f瀽鍣ㄥ伐鍘傜被鐨勫疄渚嬬被浼鹼紝閮芥槸閫氳繃newInstance()鏂規(guī)硶鏉ュ垱寤猴紝涓嶅悓鐨勬槸SAXParserFactory鐨刵ewInstance()鏂規(guī)硶鏌ユ壘鐨勫伐鍘傜被灞炴ф槸錛歫avax.xml.parsers.SAXParserFactory銆傚悓鏍鳳紝鑾峰彇sax瑙f瀽鍣ㄥ疄渚嬬殑鏂規(guī)硶錛屽彲浠ラ氳繃璋冪敤newSAXParser()銆?/p>
浣跨敤SAXParser鍜孹MLReader閮藉彲浠ョ敤鏉ュxml鏂囨。榪涜瑙f瀽錛屽墠鑰呭彧鏄鍚庤呭張涓嬈$殑鍖呰銆?/p>
3.3 JDOM
dom琚璁$敤浜庡畬鎴愬嚑涔庢墍鏈夌殑xml鎿嶄綔浠誨姟錛屽悓鏃跺張鏄笌璇█鏃犲叧鐨勶紝榪欏氨瀵艱嚧dom鐨刟pi搴炲ぇ鑰屼笖澶嶆潅銆備負(fù)浜嗕嬌java紼嬪簭鍛樻洿鏂逛究鍦板鐞唜ml鏂囨。錛屼袱浣嶅浗澶栫殑java鎶鏈笓瀹跺垱寤轟簡jdom銆傜敤developerworks涓婄殑涓鍙ヨ瘽錛?#8220;寤剁畫寮婧愮ぞ緹ゆ湁闇瑕佸氨鍒涘緩宸ュ叿鐨勫巻鍙蹭紶緇燂紝Java 鎶鏈笓瀹?Jason Hunter 鍜?Brett McLaughlin 緙旈犱簡 JDOM”銆傛墍浠ュ彲浠ヨ涓猴紝jdom鏄竴縐嶄笓闂ㄧ敤浜巎ava璇█瑙f瀽xml鏂囨。鐨勫紑鏀炬簮浠g爜妗嗘灦銆?/p>
jdom涔熶嬌鐢ㄥ璞℃爲(wèi)鏉ヨ〃紺簒ml鏂囨。錛屽簳灞備嬌鐢╯ax瑙f瀽鍣ㄥ垎鏋恱ml鏂囨。錛屽艦鎴恓dom鏍?wèi)銆?/p>
3.4 DOM4J
鍚宩dom涓鏍鳳紝dom4j涔熸槸搴旂敤浜巎ava騫沖彴錛屾彁渚涚畝鍗曘佺伒媧葷殑澶勭悊xml鏂囨。鐨勫紑鍙戞簮浠g爜搴撱傚緢鏈夋剰鎬濈殑鏄紝dom4j鏄敱鏃╂湡寮鍙慾dom鐨勪漢鍒嗙鍑烘潵鑰屽悗鐙珛寮鍙戠殑錛岋紙鍒╃泭鎴栨剰瑙佷笉鍜岋紵鍛靛懙錛変笌jdom鐩告瘮錛宒om4j鎻愪緵浜嗘洿濂界殑鐏墊椿鎬с備粠緗戜笂鐨勮瘎璁哄彲浠ョ湅鍑猴紝dom4j浠庢ц兘銆佸姛鑳姐佹槗鐢ㄦт笂閮戒紭浜巎dom錛屽彲浠ヤ綔涓鴻В鏋恱ml鏂囦歡鐨勯閫夈傦紙鐪嬫潵鍚庢潵鍒嗙鍑虹殑閭f嫧浜洪夋嫨榪樻槸姝g‘鐨勶紒錛夋祦琛岀殑hibernate錛宩axm閮介噰鐢ㄤ簡dom4j澶勭悊xml鏂囦歡銆?/p>
dom4j涔熶嬌鐢╯ax瑙f瀽鍣ㄦ潵鍒嗘瀽xml鏂囨。錛屽艦鎴恉om4j鏍?wèi)锛涘畠涔熸彁渚涗簡鐢ㄤ簬澶ф枃妗g殑鍩轰簬浜嬩欢鐨勫鐞嗘ā鍨嬨?/p>
鎵浠ュ彲浠ョ湅鍑猴紝jdom鍜宒om4j鍙槸寮婧愮ぞ鍖轟駭鐢熷嚭鏉ョ殑鏂逛究鍦拌В鏋恱ml鐨勬鏋舵垨宸ュ叿錛屽茍娌℃湁鍒涢犳柊鐨剎ml瑙f瀽鏂瑰紡銆傚鏋滄嬁
鎷夸互涓婂洓縐嶈В鏋恱ml鐨勬柟娉曟瘮杈冿紝鐢ㄥ瓩閼佸笀鐨勮瘽錛屽鏋滀綘闇瑕侀綣佹洿鎹㈣В鏋愬櫒灝辨槸jaxp鏂瑰紡錛屽惁鍒欐帹鑽愪嬌鐢╠om4j銆?/p>