xml解析源碼
『壹』 java解析xml的幾種方式哪種最好
(1)DOM解析
DOM是html和xml的應用程序介面(API),以層次結構(類似於樹型)來組織節點和信息片段,映射XML文檔的結構,允許獲取
和操作文檔的任意部分,是W3C的官方標准
【優點】
①允許應用程序對數據和結構做出更改。
②訪問是雙向的,可以在任何時候在樹中上下導航,獲取和操作任意部分的數據。
【缺點】
①通常需要載入整個XML文檔來構造層次結構,消耗資源大。
【解析詳解】
①構建Document對象:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = bdf.newDocumentBuilder();
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(xml文件);
Document doc = bd.parse(is);
②遍歷DOM對象
Document: XML文檔對象,由解析器獲取
NodeList: 節點數組
Node: 節點(包括element、#text)
Element: 元素,可用於獲取屬性參數
(2)SAX(Simple API for XML)解析
流模型中的"推"模型分析方式。通過事件驅動,每發現一個節點就引發一個事件,事件推給事件處理器,通過回調方法
完成解析工作,解析XML文檔的邏輯需要應用程序完成
【優勢】
①不需要等待所有數據都被處理,分析就能立即開始。
②只在讀取數據時檢查數據,不需要保存在內存中。
③可以在某個條件得到滿足時停止解析,不必解析整個文檔。
④效率和性能較高,能解析大於系統內存的文檔。
【缺點】
①需要應用程序自己負責TAG的處理邏輯(例如維護父/子關系等),文檔越復雜程序就越復雜。
②單向導航,無法定位文檔層次,很難同時訪問同一文檔的不同部分數據,不支持XPath。
【原理】
簡單的說就是對文檔進行順序掃描,當掃描到文檔(document)開始與結束、元素(element)開始與結束時通知事件
處理函數(回調函數),進行相應處理,直到文檔結束
【事件處理器類型】
①訪問XML DTD:DTDHandler
②低級訪問解析錯誤:ErrorHandler
③訪問文檔內容:ContextHandler
【DefaultHandler類】
SAX事件處理程序的默認基類,實現了DTDHandler、ErrorHandler、ContextHandler和EntityResolver介面,通常
做法是,繼承該基類,重寫需要的方法,如startDocument()
【創建SAX解析器】
SAXParserFactory saxf = SAXParserFactory.newInstance();
SAXParser sax = saxf.newSAXParser();
註:關於遍歷
①深度優先遍歷(Depthi-First Traserval)
②廣度優先遍歷(Width-First Traserval)
(3)JDOM(Java-based Document Object Model)
Java特定的文檔對象模型。自身不包含解析器,使用SAX
【優點】
①使用具體類而不是介面,簡化了DOM的API。
②大量使用了Java集合類,方便了Java開發人員。
【缺點】
①沒有較好的靈活性。
②性能較差。
(4)DOM4J(Document Object Model for Java)
簡單易用,採用Java集合框架,並完全支持DOM、SAX和JAXP
【優點】
①大量使用了Java集合類,方便Java開發人員,同時提供一些提高性能的替代方法。
②支持XPath。
③有很好的性能。
【缺點】
①大量使用了介面,API較為復雜。
(5)StAX(Streaming API for XML)
流模型中的拉模型分析方式。提供基於指針和基於迭代器兩種方式的支持,JDK1.6新特性
【和推式解析相比的優點】
①在拉式解析中,事件是由解析應用產生的,因此拉式解析中向客戶端提供的是解析規則,而不是解析器。
②同推式解析相比,拉式解析的代碼更簡單,而且不用那麼多庫。
③拉式解析客戶端能夠一次讀取多個XML文件。
④拉式解析允許你過濾XML文件和跳過解析事件。
【簡介】
StAX API的實現是使用了Java Web服務開發(JWSDP)1.6,並結合了Sun Java流式XML分析器(SJSXP)-它位於
javax.xml.stream包中。XMLStreamReader介面用於分析一個XML文檔,而XMLStreamWriter介面用於生成一個
XML文檔。XMLEventReader負責使用一個對象事件迭代子分析XML事件-這與XMLStreamReader所使用的游標機制
形成對照。
『貳』 xml文件查看源碼
你好的!
xml 文件就是普通的文件吧!
你右鍵用記事本打開!
或者,下載個notepad++,或者emeditor 打開
這樣打開選擇xml 文件格式查看就更清晰了
您試試
望採納!
『叄』 Commands.xml涓鐨勭粨鏋勮В鏋
Bentley浜屾″紑鍙戦噰鐢╟ommands.xml浣滀負宓屽叆寮忚祫婧愯澆鍏ョ▼搴忎腑錛宑ommands.xml鍖呭惈鍩圭粷浜嗙▼搴忚佹墽琛岀殑鍛戒護錛屽垵瀛﹁呭紑鍙戞椂闇瑕佸噯紜浜嗚Вcommands.xml鐨勭粨鏋勬墠鑳藉啓濂藉懡浠わ紝瀹屾垚寮鍙戙
浠ヤ笅涓轟竴涓紼嬪簭鐨.commands鐨勬簮鐮侊細
錛1錛夊湪<RootKeyinTable>鍜<KeyinTable>涓鏈夊睘鎬ID錛岃〃紺鴻ヨ〃鐨勫悕縐般
錛2錛夊懡浠よ〃鐨勫唴瀹圭敱涓涓鎴栧氫釜<Keyword>鍏冪礌緇勬垚錛<Keyword>灞炴SubtableRef鎸囧悜鍏朵笅綰у懡浠よ〃鐨処D銆傝繖鏍鳳紝閫氳繃褰撳墠琛ㄤ腑<Keyword>鐨凷ubtableRef鍜屼笅綰ц〃涓<KeyinTable>鐨処D灝辮兘鏋勬垚涓涓鍛戒護鏍戙
錛3錛<Keyword>榪樺繀欏繪湁灞炴CommandWord錛岃繖鏄鐢ㄦ埛鍦∕stn閿鍏ュ煙涓鍙杈撳叆鐨勫崟璇嶃<Keyword>鏈変竴涓灞炴CommandClass琛ㄧず璇ラ敭鍏ュ懡浠ゅ瑰簲鐨勫懡浠ょ被鍒錛岀洰鍓嶆敮鎸佺殑鍛戒護綾誨埆鏈塒lacement銆乂iewing銆丗ence銆丳arameters銆丩ocks銆丮acroCommand銆丮anipulation絳夈傚懡浠ょ被鍒榪樺彲浠ユ槸Inherit錛岃〃紺虹戶鎵誇笂涓鍛戒護鍗曡瘝鎵灞炵殑鍛戒護綾誨埆銆
錛4錛<Keyword>涓榪樺彲浠ュ寘鍚<Options>欏癸紝璇ラ」鏄瀵<Keyword>鐨勮繘涓姝ヨ存槑錛屽叾灞炴ф湁Required銆丏efault銆乀ryParse銆丠idden絳夈
Required="true"琛ㄧず璇ュ懡浠ゅ瓧涓嶆槸鏈鍚庝竴涓鍗曡瘝錛屽繀欏繪湁涓嬬駭瀛愯妭鐐癸紱
Default="true"琛ㄧず璇ュ懡浠ゅ瓧涓洪粯璁わ紝褰撶渷鐣ヨ繖涓綰у懡浠ゅ瓧鏃跺彇璇ュ懡浠ゅ瓧錛屽湪鍚屼竴綰у埆涓鍙鑳芥湁涓涓鍛戒護瀛椾負Default銆
TryParse="true"琛ㄧず璇ュ懡浠ゅ瓧鍚庡彲璺熺敤鎴瘋緭鍏ョ殑浠繪剰瀛楃︼紝榪欎簺涓嶅湪鍛戒護琛ㄤ腑鐨勫瓧絎︿覆灝嗚浼犻掑埌鍛戒護澶勭悊鍑芥暟鐨剈nparsed鍙傛暟涓銆傛瘮濡侫ctive Color鍛戒護鍚庡彲璺熶紡涓瀚孯ed銆丟reen銆丅lue絳夛紝涔熷彲浠ヨ窡涓涓鏁板瓧錛屽侫ctive Color 245銆傛垜浠涓嶅彲鑳藉湪鍛戒護琛ㄤ腑鍒楀嚭姣忎釜榪欐牱鐨勯敭鍏ワ紝姝ゆ椂鍙鐢═ryParse灞炴э紱
Hidden="true"琛ㄧず璇ュ懡浠ら殣鈃忥紝鐢ㄦ埛鍦∕stn鐨勫懡浠ゆ祻瑙堝櫒涓鐪嬩笉鍒拌ュ懡浠わ紝浣嗚ュ懡浠や粛鐒舵湁鏁堛傝繖浜涢殣鈃忕殑鍛戒護寰寰涓虹▼搴忕己鎵嬫墍鐢ㄦ垨鏆傛椂涓嶆兂瀵圭敤鎴峰叕寮銆
錛5錛<KeyinHandlers>孌靛彧鏈<KeyinHandler>涓縐嶅厓緔犮傚叾涓鐨凨eyin灞炴ц〃紺哄畬鏁寸殑閿鍏ュ懡浠ゅ瓧絎︿覆錛<KeyinHandler>鐨凢unction灞炴т負璇ラ敭鍏ュ懡浠ゅ瑰簲鐨勫勭悊鍑芥暟鍚嶏紝璇ュ嚱鏁板悕鐢卞懡鍚嶇┖闂村悕銆佺被鍚嶅拰鍑芥暟鍚(鎴栫О鏂規硶鍚)涓夐儴鍒嗙粍鎴愩傛崲鍙ヨ瘽璇達紝褰撶敤鎴峰湪Mstn涓杈撳叆Keyin涓鐨勫瓧絎︿覆鏃訛紝灝變細璋冪敤鍒癋unction鎸囧畾鐨勫嚱鏁般
Mstn涓鐨勫懡浠ょ敱涓鍒頒簲涓鍗曡瘝緇勬垚錛屽洜鑰岋紝鎴戜滑鍦ㄥ畾涔夎嚜宸辯殑commands.xml鏃跺湪<SubKeyinTables>孌典腑鏈澶氬彲浠ュ畾涔夊洓綰у懡浠ゃ
寤鴻錛氬懡浠ゅ垪琛ㄤ笉瑕佽秴榪囦笁綰э紝鍛戒護杈冨皯鏃訛紝鍙浠ラ夋嫨涓ょ駭鍗沖彲銆
『肆』 在java中解析xml有哪幾種方法
(1)DOM解析
DOM是html和xml的應用程序介面(API),以層次結構(類似於樹型)來組織節點和信息片段,映射XML文檔的結構,允許獲取
和操作文檔的任意部分,是W3C的官方標准
【優點】
①允許應用程序對數據和結構做出更改。
②訪問是雙向的,可以在任何時候在樹中上下導航,獲取和操作任意部分的數據。
【缺點】
①通常需要載入整個XML文檔來構造層次結構,消耗資源大。
【解析詳解】
①構建Document對象:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = bdf.newDocumentBuilder();
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(xml文件);
Document doc = bd.parse(is);
②遍歷DOM對象
Document: XML文檔對象,由解析器獲取
NodeList: 節點數組
Node: 節點(包括element、#text)
Element: 元素,可用於獲取屬性參數
(2)SAX(Simple API for XML)解析
流模型中的"推"模型分析方式。通過事件驅動,每發現一個節點就引發一個事件,事件推給事件處理器,通過回調方法
完成解析工作,解析XML文檔的邏輯需要應用程序完成
【優勢】
①不需要等待所有數據都被處理,分析就能立即開始。
②只在讀取數據時檢查數據,不需要保存在內存中。
③可以在某個條件得到滿足時停止解析,不必解析整個文檔。
④效率和性能較高,能解析大於系統內存的文檔。
【缺點】
①需要應用程序自己負責TAG的處理邏輯(例如維護父/子關系等),文檔越復雜程序就越復雜。
②單向導航,無法定位文檔層次,很難同時訪問同一文檔的不同部分數據,不支持XPath。
【原理】
簡單的說就是對文檔進行順序掃描,當掃描到文檔(document)開始與結束、元素(element)開始與結束時通知事件
處理函數(回調函數),進行相應處理,直到文檔結束
【事件處理器類型】
①訪問XML DTD:DTDHandler
②低級訪問解析錯誤:ErrorHandler
③訪問文檔內容:ContextHandler
【DefaultHandler類】
SAX事件處理程序的默認基類,實現了DTDHandler、ErrorHandler、ContextHandler和EntityResolver介面,通常
做法是,繼承該基類,重寫需要的方法,如startDocument()
【創建SAX解析器】
SAXParserFactory saxf = SAXParserFactory.newInstance();
SAXParser sax = saxf.newSAXParser();
註:關於遍歷
①深度優先遍歷(Depthi-First Traserval)
②廣度優先遍歷(Width-First Traserval)
(3)JDOM(Java-based Document Object Model)
Java特定的文檔對象模型。自身不包含解析器,使用SAX
【優點】
①使用具體類而不是介面,簡化了DOM的API。
②大量使用了Java集合類,方便了Java開發人員。
【缺點】
①沒有較好的靈活性。
②性能較差。
(4)DOM4J(Document Object Model for Java)
簡單易用,採用Java集合框架,並完全支持DOM、SAX和JAXP
【優點】
①大量使用了Java集合類,方便Java開發人員,同時提供一些提高性能的替代方法。
②支持XPath。
③有很好的性能。
【缺點】
①大量使用了介面,API較為復雜。
(5)StAX(Streaming API for XML)
流模型中的拉模型分析方式。提供基於指針和基於迭代器兩種方式的支持,JDK1.6新特性
【和推式解析相比的優點】
①在拉式解析中,事件是由解析應用產生的,因此拉式解析中向客戶端提供的是解析規則,而不是解析器。
②同推式解析相比,拉式解析的代碼更簡單,而且不用那麼多庫。
③拉式解析客戶端能夠一次讀取多個XML文件。
④拉式解析允許你過濾XML文件和跳過解析事件。
【簡介】
StAX API的實現是使用了Java Web服務開發(JWSDP)1.6,並結合了Sun Java流式XML分析器(SJSXP)-它位於
javax.xml.stream包中。XMLStreamReader介面用於分析一個XML文檔,而XMLStreamWriter介面用於生成一個
XML文檔。XMLEventReader負責使用一個對象事件迭代子分析XML事件-這與XMLStreamReader所使用的游標機制
形成對照。