1. 程式人生 > >xml 解析的四種方法

xml 解析的四種方法

1  DOM解析

是將這個xml檔案裝入記憶體

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Document document = builder.parse("books.xml");

Element bookStore = document.getDocumentElement();//獲取根節點。

節點有三種:元素節點、屬性節點、文字節點

getTextContent() 獲取節點的文字

getFirstChild().getNodeValue() //獲取子節點,倆個方法都可以獲取文字,視具體情況而定。

2 SAX解析

是將xlm文件從上到下解析,一步一步來解析元素節點,將解析xml的工作交給了Handler,所以需要使用者自己實現DefaultHandler

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser saxParse = factory.newSAXParser();

SAXHandler handler = new SAXHandler();

saxParse.parse(newFileInputStream("books.xml"), handler);

public void startDocument() throws SAXException {

}

public void endDocument() throws SAXException {

}

當文件開始解析和結束解析會呼叫上面的方法

 

public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {}

public void endElement(String arg0, String arg1, String arg2) throws SAXException {}

解析elements,

 

public void characters(char[] arg0, int arg1, int arg2) throws SAXException {

}

用來儲存整個xml文件的,可以通過String st = new String(ch, start, length);來獲得當前元素的內容,空白節點也算

 

3 JDOM解析:有點類似DOM解析

匯入jdom.jar 。org.jdom2

SAXBuilder builder = new SAXBuilder();

InputStream is = new FileInputStream("books.xml");

Document document = builder.build(is);

Element element = document.getRootElement(); //獲取根節點

List<Element> bookList = element.getChildren();

處理亂碼問題:通過InputStreamReader來實現

InputStream is = new FileInputStream("books.xml");

Reader reader = new InputStreamReader(is, "utf-8");

Document document = builder.build(reader);

 

4 DOM4j解析:

匯入jar,獲取元素使用的都是迭代器

SAXReader reader = new SAXReader();

Reader r = new InputStreamReader(new FileInputStream("books.xml"), "UTF-8");

Document document = reader.read(r);

Element element = document.getRootElement();

Iterator<Element> iterator = element.elementIterator();

 

總結

DOM和SAX解析是官方提供的,DOM解析是平臺無關的,SAX是基於事件驅動的,剩下的倆種是從這裡衍生出來的,只能Java使用

 

DOM:形成樹結構,便於理解,解析過程中樹結構留在了記憶體中,可以一邊修改一邊解析,xml檔案過大時可能會造成記憶體溢位

 

SAX:是基於事件驅動解析的,即一步一步來解析,從元素的開始標籤到結束,記憶體耗費小,適用於只處理資料的情況。 不宜編碼,訪問同一xml的不同位置比較費勁

 

JDOM:使用具體類,獲取子節點或元素都是通過集合形式

 

DOM4J:使用抽象和介面,效能優異,功能強大

 

解析速度:SAX最快,一般使用DOM4J