1. jdom解析xml文檔
1.1 簡介
jdom是一個開源項目,它基于樹型結構,利用純java的技術對xml文檔實作解析、生成、序列化以及多種操作。jdom 直接為java程式設計服務。它利用更為強有力的java語言的諸多特性(方法重載、集合概念以及映射),把sax和dom的功能有效地結合起來。在使用設計上盡可能地隐藏原來使用xml過程中的複雜性。利用jdom處理xml文檔将是一件輕松、簡單的事。
jdom幫助文檔 : http://www.jdom.org/docs/apidocs/
jar包下載下傳位址:點選打開連結
1.2 解析步驟
(1)建立saxbuilder對象
<code>saxbuilder saxbuilder = new saxbuilder();</code>
(2)建立輸入流對象并将xml文檔加載到輸入流中
<code>fileinputstream inputstream = new fileinputstream("d:\\bookstore.xml");</code>
(3)通過saxbuilder對象的build方法将輸入流加載到saxbuilder中(注意:document 所引用的包是org.jdom2.document;)
<code>document document = saxbuilder.build(inputstream);</code>
(4)通過document對象擷取xml文檔的根節點
<code>element rootelement = document.getrootelement();</code>
(5)根據根節點擷取根節點下的子節點集合
<code>list<element> booklist = rootelement.getchildren();</code>
(6)根據節點擷取屬性節點集合
<code>list<attribute> attrlist = book.getattributes();</code>
(7)根據節點(元素節點或者屬性節點)擷取節點名稱和節點值
<code>// 屬性名稱</code>
<code>node.getname();</code>
<code>// 屬性值</code>
<code>node.getvalue();</code>
1.3 主要方法
(1)傳回文檔的根節點
public element getrootelement()
<code>// document為document對象</code>
(2)傳回節點的所有子節點的集合
public java.util.list<element> getchildren()
<code>// rootelement為element對象</code>
(3)傳回節點的所有屬性節點的集合
public java.util.list<attribute> getattributes()
<code>// book為element對象</code>
<code>list<attribute> attrlist = book.getattributes()</code>
(4)根據子節點的名稱傳回節點的子節點
public element getchild(java.lang.string cname)
<code>element titleelement = book.getchild("title");</code>
(5)傳回節點的名稱
public java.lang.string getname()
<code>// titleelement為title節點</code>
<code>titleelement.getname();</code>
(6)傳回節點值
public java.lang.string getvalue()、
<code>titleelement.getvalue()</code>
dom方式getnodevalue() 對于元素節點時傳回null。不同于dom方式,jdom無論是屬性節點還是元素節點都會傳回節點對應的文本值。
<code><author>scott meyers</author></code>
對于這個節點來說,dom的getnodevalue()傳回null,jdom的getvalue()傳回"scott meyers"。
1.3 具體執行個體
<code>package com.qunar.xml;</code>
<code> </code>
<code>import java.io.fileinputstream;</code>
<code>import java.io.filenotfoundexception;</code>
<code>import java.io.ioexception;</code>
<code>import java.util.list;</code>
<code>import org.jdom2.attribute;</code>
<code>import org.jdom2.document;</code>
<code>import org.jdom2.element;</code>
<code>import org.jdom2.jdomexception;</code>
<code>import org.jdom2.input.saxbuilder;</code>
<code>/**</code>
<code>* jdom解析xml文檔</code>
<code>* @author sjf0115</code>
<code>*</code>
<code>*/</code>
<code>public class jdomxmlcode {</code>
<code>public static void main(string[] args) {</code>
<code>try {</code>
<code>// 建立saxbuilder對象</code>
<code>// 建立輸入流對象并将xml文檔加載到輸入流中</code>
<code>// 通過saxbuilder對象的build方法将輸入流加載到saxbuilder中</code>
<code>// 通過document對象擷取xml文檔的根節點</code>
<code>// 根據根節點擷取根節點下的子節點集合</code>
<code>// 周遊子節點</code>
<code>for (element book : booklist) {</code>
<code>system.out.println("開始解析一本書...");</code>
<code></code>
<code>// 解析屬性</code>
<code>for (attribute attribute : attrlist) {</code>
<code>system.out.print("---" + attribute.getname() + ":");</code>
<code>system.out.println(attribute.getvalue());</code>
<code>}//for</code>
<code>// 擷取book節點下的子節點</code>
<code>list<element> bookchildren = book.getchildren();</code>
<code>for (element bookchild : bookchildren) {</code>
<code>// 節點名稱</code>
<code>system.out.print("------" + bookchild.getname() + ":");</code>
<code>// 節點值</code>
<code>system.out.println(bookchild.getvalue());</code>
<code>system.out.println("結束解析一本書...");</code>
<code>} catch (filenotfoundexception e) {</code>
<code>e.printstacktrace();</code>
<code>} catch (jdomexception e) {</code>
<code>} catch (ioexception e) {</code>
<code>}</code>
運作結果:
開始解析一本書...
---category:java
------title:java多線程程式設計核心技術
------author:高洪岩
------year:2015
------price:69.00
結束解析一本書...
---category:c++
------title:effective c++: 55 specific ways to improve your programs and designs
------author:scott meyers
------year:2006
------price:58.00
---category:web
------title:learning xml
------author:erik t. ray
------year:2016
------price:39.95
2. dom4j解析xml文檔
2.1 簡介
dom4j是一個java的xml api,類似于jdom,用來讀寫xml檔案的。dom4j是一個十分優秀的javaxml api,具有性能優異、功能強大和極其易使用的特點,同時它也是一個開放源代碼的軟體,可以在sourceforge上找到它。如今可以看到越來越多的java軟體都在使用dom4j來讀寫xml,特别值得一提的是連sun的jaxm也在用dom4j。這已經是必須使用的jar包,
hibernate也用它來讀寫配置檔案。
2.2解析
(1)建立saxreader對象
<code>saxreader saxreader = new saxreader();</code>
(2)通過saxreader對象的read方法加載xml文檔擷取document對象
<code>document document = saxreader.read(new file("d:\\bookstore.xml"));</code>
(3)通過document對象擷取根節點
<code>element bookstore = document.getrootelement();</code>
(4)通過element對象的elementiterator方法擷取疊代器
<code>iterator iterator = bookstore.elementiterator();</code>
(5)周遊疊代器擷取根節點的資訊
<code>while (iterator.hasnext()) {</code>
<code>// 擷取下一個子節點</code>
<code>element book = (element)iterator.next();</code>
(6)擷取屬性節點的屬性名稱和屬性值
<code>// 擷取book的屬性節點集合</code>
<code>list<attribute> bookattr = book.attributes();</code>
<code>// 周遊book屬性節點</code>
<code>for (attribute attribute : bookattr) {</code>
<code>// 擷取book的屬性節點的屬性名稱以及屬性值</code>
<code>system.out.println("name:" + attribute.getname() + " value:" + attribute.getvalue());</code>
(7)擷取元素節點的節點名稱和對應的文本值
<code>iterator ite = book.elementiterator();</code>
<code>// 周遊book節點的子節點</code>
<code>while(ite.hasnext()){</code>
<code>// book節點的子節點</code>
<code>element bookchild = (element)ite.next();</code>
<code>system.out.println("name:" + bookchild.getname() + " value:" + bookchild.getstringvalue());</code>
<code>//system.out.println("name:" + bookchild.getname() + " value:" + bookchild.gettext());</code>
<code>}//while</code>
2.3 具體案例
<code>import java.io.file;</code>
<code>import java.util.iterator;</code>
<code>import org.dom4j.attribute;</code>
<code>import org.dom4j.document;</code>
<code>import org.dom4j.documentexception;</code>
<code>import org.dom4j.element;</code>
<code>import org.dom4j.io.saxreader;</code>
<code>public class dom4jxmlcode {</code>
<code>// 建立saxreader對象</code>
<code>// 通過saxreader對象的read方法加載xml文檔擷取document對象</code>
<code>// 通過document對象擷取根節點</code>
<code>// 通過element對象的elementiterator方法擷取疊代器</code>
<code>// 周遊根節點的子節點</code>
<code>// 擷取下一個元素節點</code>
<code>system.out.println("name:" + bookchild.getname() + " value:" + bookchild.getstringvalue());</code>
<code>} catch (documentexception e) {</code>
name:category value:java
name:title value:java多線程程式設計核心技術
name:author value:高洪岩
name:year value:2015
name:price value:69.00
name:category value:c++
name:title value:effective c++: 55 specific ways to improve your programs and designs
name:author value:scott meyers
name:year value:2006
name:price value:58.00
name:category value:web
name:title value:learning xml
name:author value:erik t. ray
name:year value:2016
name:price value:39.95