DOM與DOM4J對XML檔案的解析
阿新 • • 發佈:2019-02-09
package com.freshbin.domtest.test; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class DOMTest { public static void main(String[] args) { // TODO Auto-generated method stub //建立一個DocumentBuilderFactory的物件 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { //建立一個DocumentBuilder的物件 DocumentBuilder db = dbf.newDocumentBuilder(); //通過DocumentBuilder物件的parse方法載入book.xml檔案到當前專案下 Document document = db.parse("freshbin/book.xml"); //獲取所有book節點的集合 NodeList bookList = document.getElementsByTagName("book"); //通過NodeList的getLength()方法獲取bookList的長度 System.out.println("一共有" + bookList.getLength() + "本書\n"); //遍歷每一個book節點 for(int i = 0; i < bookList.getLength(); i++) { System.out.println("========下面開始遍歷第" + (i+1) + "本書====="); //通過item()方法獲取一個book節點,nodelist的索引值從0開始 Node book = bookList.item(i); //獲取book節點的所有屬性的集合 NamedNodeMap attrs = book.getAttributes(); System.out.println("第" + (i+1) + "本書共有" + attrs.getLength() + "個屬性"); //遍歷book的屬性 for(int j = 0; j < attrs.getLength(); j++) { //通過item()方法獲取book節點的每一個屬性 Node attr = attrs.item(j); //獲取屬性名 System.out.print("屬性名:" + attr.getNodeName()); //獲取屬性值 System.out.println("--屬性名:" + attr.getNodeValue()); } //解析book節點的子節點 NodeList childNodes = book.getChildNodes(); //遍歷childNodes獲取每個節點的節點名和節點值 System.out.println("第" + (i+1) + "本書共有" + childNodes.getLength() + "個子節點"); for(int k = 0; k < childNodes.getLength(); k++) { //區分出text型別的node以及element型別的node if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) { //獲取了element節點的節點名 System.out.print("第" + (k+1) + "個節點的節點名" + childNodes.item(k).getNodeName()); //獲取了element節點的節點值,節點值其實看做是子節點,即比如<name>freshbin</name>,freshbin是name的子節點 // System.out.println("--節點值是:" + childNodes.item(k).getFirstChild().getNodeValue()); //第二種獲取值的方法 System.out.println("--節點值是:" + childNodes.item(k).getTextContent()); } } System.out.println("========結束遍歷第" + (i+1) + "本書=====\n"); } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
以上是DOM的方式解析,結果如下
然後是DOM4J的方式解析
package com.freshbin.dom4jtest.test; import java.io.File; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class DOM4JTest { public static void main(String[] args) { // TODO Auto-generated method stub //建立SAXReader的物件reader SAXReader reader = new SAXReader(); try { //通過reader物件的read()方法載入book.xml檔案 Document document = reader.read(new File("freshbin/book.xml")); //通過document物件獲取根節點bookStore Element bookStore = document.getRootElement(); //通過Element物件的elementIterator方法獲取迭代器 Iterator itr = bookStore.elementIterator(); //遍歷迭代器,獲取根節點中的資訊 while(itr.hasNext()) { System.out.println("==========開始遍歷某一本書============="); Element book = (Element)itr.next(); //獲取book的屬性名以及屬性值 List<Attribute> bookAttrs = book.attributes(); for(Attribute attr : bookAttrs) { System.out.println("屬性名:" + attr.getName() + "--屬性值:" + attr.getStringValue()); } Iterator itrBook = book.elementIterator(); while(itrBook.hasNext()) { Element bookChild = (Element)itrBook.next(); System.out.println("節點名:" + bookChild.getName() + "--節點值:" + bookChild.getStringValue()); } System.out.println("==========結束遍歷某一本書=============\n"); } } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }