Java中對xml的解析

 

Java中對xml的解析

1.Dom4j

Dom解析原理:xml解析器一次性將xml文檔加載到內存中,而後在內存中構建一顆Document對象樹。在經過Document對象獲得樹上的節點對象,經過節點對象操做文檔內容。java

 Dom4J 經常使用的對象: node

 SAXReader:讀取 xml 文件到 Document 樹結構文件對象 web

 Document:是一個 xml 文檔對象樹,類比 Html 文檔對象。 編程

 Element:元素節點。經過 Document 對象能夠查找單個元素 dom

 

使用步驟:函數

導入 Dom4J.jar 包 dom4j-1.6.1.jar )工具

1.建立SaxReader解析器ui

          SAXReader Reader = new SAXReader();編碼

2.經過read方法得到Document對象lua

          Document document = Reader.read("conf/student.xml");
3.得到根節點

  Element rootEle = document.getRootElement();

4.4.經過迭代器遍歷xml文檔

Iterator it = rootEle.elementIterator();

while (it.hasNext()) {

Element stusEle = (Element) it.next();

Iterator it01 = stusEle.elementIterator();

while (it01.hasNext()) {

Element stuEle = (Element) it01.next();

System.out.println(stuEle.getStringValue());

}

System.out.println("--------------------------------");

}

Dom4j官方文檔中有quick start 能夠幫助咱們快速使用該技術!

 

 

2.SAX

Sax解析工具是sun公司提供的,內至於jdk中。Org.xml.sax.*;

sax解析原理:事件驅動,邊讀邊寫

 

當遇到開始標籤時,自動調用startElement(String url,String localName,String qname,Attribute attribute)方法;當遇到文本時,自動執行characters(char[]ch,int start,int length);當遇到結束標籤時自動執行endElement(String url,String localName,String qName)方法。

<結束標籤以’/’做爲標誌,結束方法比開始方法只少一個attribute 參數>

 

使用步驟:

1.建立解析工廠

//SAXParserFactory 構造方法被保護,只能經過 .newInstance()方法建立實例

SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();

2.建立解析器

//經過工廠建立解析器

SAXParser saxParser = saxParserFactory.newSAXParser();

3.執行parser方法

// 執行 parser 方法,傳入兩個參數:xml 文件路徑、事件處理器 

saxParser.parse("conf/student.xml", new MyDefaultHandler());

所謂事件處理器是指 一個繼承與 DefaultHandler 的類,進行重寫其中的startElement()characters()endElement()方法實現相應的處理。

 建立一個類,繼承 DefaultHander 類,重寫三個方法: 

A、 startElement 獲取開始標籤,重要的兩個參數說明 

a、 qName:把標籤名稱返回 

b、 attributes:返回標籤中的屬性對象 

B、 character  獲取標籤文本內容 

C、 endElement  獲取結束標籤  

 

============DOM解析    vs   SAX解析 ========

DOM解析

SAX解析

原理: 一次性加載xml文檔,不適合大容量的文件讀取

原理: 加載一點,讀取一點,處理一點。適合大容量文件的讀取

DOM解析能夠任意進行增刪改爲

SAX解析只能讀取

DOM解析任意讀取任何位置的數據,甚至往回讀

SAX解析只能從上往下,按順序讀取,不能往回讀

DOM解析面向對象的編程方法(NodeElementAttribute,Java開發者編碼比較簡單。

SAX解析基於事件的編程方法。java開發編碼相對複雜。

 

3.XPath 

主要是用於快速獲取所需的節點對象。

選擇節點:XPath 使用路徑表達式在 XML 文檔中選取節點。節點是經過沿着

路徑或者 step 來選取的。下面列出了最有用的路徑表達式: 

表達式 描述 

nodename  選取此節點的全部子節點。 

/  從根節點選取。 

//      從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。 

.  選取當前節點。 

..  選取當前節點的父節點。 

@  選取屬性。   

 

text()獲取節點的文本內容函數 

使用步驟:

// 1.經過DocumentBuilderFactor建立解析工廠

DocumentBuilderFactory builderFactory = DocumentBuilderFactory

.newInstance();

// 2.經過工廠得到解析器

DocumentBuilder builder = builderFactory.newDocumentBuilder();

// 3.經過parser方法獲取Document

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

// 4.獲取xpath對象

XPath xpath = XPathFactory.newInstance().newXPath();

// 5.獲取 bookstore 節點下 book 屬性 category 值爲 web 下的第二個title 節點的文本內容

String exp = "/bookstore/book[@category='web'][2]/title/text()";

String tit = (String) xpath.evaluate(exp, document,

XPathConstants.STRING);

System.out.println(tit);

// 獲取 bookstore 節點下 book 屬性 category 值爲 web 的 titile 屬性爲 en 的節點內容

String expEn = "/bookstore/book[@category='web']/title[@lang ='en']/text()";

String titEN = (String) xpath.evaluate(expEn, document,

XPathConstants.STRING);

System.out.println(titEN);

// 獲取 bookstore 下 book 屬性 category 值爲 cooking 的 title 的 lang 屬性的值

String expLan = "/bookstore/book[@category='cooking']/title/@lang";

String lang = (String) xpath.evaluate(expLan, document,

XPathConstants.STRING);

System.out.println(lang);

 

// 獲取 bookstore 節點下全部 book 的節點集合(遍歷該文檔)

String expB = "/bookstore/book";

NodeList books =(NodeList) xpath.evaluate(expB, document, XPathConstants.NODESET);

for (int i = 0; i < books.getLength(); i++) {

Element book =(Element) books.item(i);

String title =(String) xpath.evaluate("title/text()", book, XPathConstants.STRING);

String author =(String) xpath.evaluate("author/text()", book, XPathConstants.STRING);

String year =(String) xpath.evaluate("year", book, XPathConstants.STRING);

String price =(String) xpath.evaluate("price", book, XPathConstants.STRING);

System.out.println(title+" "+author+" "+year+" "+price);

System.out.println("----------------------------------------------------");

}

 

4.在Dom4j中使用XPath

開發中Dom4jXPath結合使用很是靈活,因此應用普遍!

使用步驟:

1)導入xPath支持jar包 。  jaxen-1.1-beta-6.jar

2)使用xpath方法

List<Node>  selectNodes("xpath表達式");   查詢多個節點對象

Node       selectSingleNode("xpath表達式");  查詢一個節點對象

                //1.SAXReader解析器

SAXReader reader = new SAXReader();

//2.經過read方法得到Document

Document document =reader.read("conf/bookstore.xml");

//3.xpath路勁

String titlePath ="/bookstore/book[1]/title";

Element element  =(Element) document.selectObject(titlePath);

String title =element.getStringValue();

System.out.println(title);

相關文章
相關標籤/搜索