JAVA解析xml的五種方式比較

來源:互聯網
上載者:User
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所使用的游標機制
形成對照。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.