在XML文件中由于更多的是描述信息的內容,所以在得到一個xml文檔后應該利用程序安裝其中元素的定義名稱去除對應的內容,這樣的操作稱為XML解析。
在XML解析中W3C定義SAX和DOM兩中解析方式,這兩種解析方式的程序操作如下圖:

從圖中可以看出,應用程序不是直接對XML文檔進行操作的,而是首先由XML分析其對XML文檔進項分析,然后應喲程序通過XML分析器所提供的DOM接口或SAX接口對分析結果進項操作,從而間接實現了對XML文檔的訪問。下面進行具體操作
DOM解析DOM模式解析XML,是把整個XML文檔當成一個對象來處理,會先把整個文檔讀入到內存里。是基于樹的結構,通常需要加載整文檔和構造DOM樹,然后才能開始工作。
dom_demo.xml文件
<?xml version="1.0" encoding="GBK"?><addresslist> <linkman> <name>?my?</name> <email>oumyye@163.com</email> </linkman> <linkman> <name>oumyye</name> <email>oumyye@QQ.com</email> </linkman></addresslist>
DOMDemo.java解析文件
package com.xml.dom解析 ;import java.io.* ;import org.w3c.dom.* ;import javax.xml.parsers.* ;public class DOMDemo { public static void main(String args[]) throws Exception { // 取得DocumentBuilderFactory類的對象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance() ; // 取得DocumentBuilder類的對象 DocumentBuilder build = factory.newDocumentBuilder() ; Document doc = build.parse(new File("E:" + File.separator + "dom_demo.xml")) ; NodeList nl = doc.getElementsByTagName("name") ; // 輸出節點 System.out.運行結果:

SAX解析 SAX與DOM操作不同的是,SAX采用了是一種順序模式進行訪問,是一種快速讀取XML 數據的方式,當使用SAX解析器進行操作時會觸發一系列事件,如下圖所示,當掃描到文檔開始與結束,元素開始與結束時都會調用相關的處理方法,并作出相應的操作。

sax_demo.xm文件
<?xml version="1.0" encoding="GBK"?><addresslist> <linkman id="omy" name="褲"> <name>偶my耶</name> <email>oumyye@163.com</email> </linkman> <linkman id="ol" name="外"> <name>偶啦</name> <email>oumyye@qq.com</email> </linkman></addresslist>
MySAX.java 源代碼:
package com.xml.sax解析;import java.io.File;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.*;import org.xml.sax.helpers.*;public class MySAX extends DefaultHandler { public void startDocument() throws SAXException { System.out.println("<?xml version=/"1.0/" encoding=/"GBK/">"); } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.print("<"); System.out.print(qName); if (attributes != null) { // 如果存在了屬性 for (int x = 0; x < attributes.getLength(); x++) { System.out.print(" " + attributes.getQName(x) + "=/"" + attributes.getValue(x) + "/""); } } System.out.print(">"); } public void endElement(String uri, String localName, String qName) throws SAXException { System.out.print("<"); System.out.print(qName); System.out.print(">"); } public void characters(char[] ch, int start, int length) throws SAXException { System.out.print(new String(ch, start, length)); } public void endDocument() throws SAXException { System.out.println("文檔結束。。。"); } public static void main(String args[]) throws Exception { // 建立SAX解析工廠 SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse("e:" + File.separator + "sax_demo.xml", new MySAX()); }} 解析結果:

下面我們來看下DOM和SAX的區別:

新聞熱點
疑難解答