日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dom4j使用Xpath语法读取xml节点

發布時間:2024/4/17 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dom4j使用Xpath语法读取xml节点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<span?style="font-size:?small;"?mce_style="font-size:?small;">package?com.wt.dom4j; import?java.util.List; import?org.dom4j.Document; import?org.dom4j.Element; import?org.dom4j.io.SAXReader; /** ?*?Dom4j基礎操作 ?*? ?*?@author?wTang ?*?@editTime?2011年3月16日0:38:10 ?*? ?*/ public?class?Dom4jParser?{ public?static?void?main(String[]?args)?{ try?{ SAXReader?sax?=?new?SAXReader(); //?獲得dom4j的文檔對象 Document?root?=?sax.read(Dom4jParser.class.getClassLoader() .getResourceAsStream("employee.xml")); //?得到database節點 Element?database?=?(Element)?root .selectSingleNode("//employee[@id='2']"); List?list?=?database.elements();?//?得到database元素下的子元素集合 /* ?*?循環遍歷集合中的每一個元素?將每一個元素的元素名和值在控制臺中打印出來 ?*/ for?(Object?obj?:?list)?{ Element?element?=?(Element)?obj; //?getName()是元素名,getText()是元素值 System.out .println(element.getName()?+?":?"?+?element.getText()); } }?catch?(Exception?e)?{ e.printStackTrace(); } } }</span>

表達式:Element database = (Element) root.selectSingleNode("//employee[@id='2']");

輸出為:

name: wTang2
age: 20

high: 180

表達式:? ?Element database = (Element) root.selectSingleNode("/root/employee[1]");

輸出為:
name: wTang
age: 19
high: 173

我們可以給id里面的值做個參數, 封裝為方法即可給外界調用.

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

/ ? ? ?表示 ? ? ?從根節點選取。?

@和jq的屬性選擇器類似 ?選擇id=2為2的節點

[1] 表示獲取employee的第一個元素,[2]就表示第二個了.

Xpath的語法靈活多變,只寫這么點了.讀取單個節點可以選擇Xpath.

疑問:

xPath好像不能一次讀取整個xml文件 ?

比如: ?/root//employee ??

返回的是一個封裝的List ?長度為3

如果是List做嵌套那么List的長度應該是2,再嵌套2個List.

結果只讀取到了1個employee(3個節點).Xpath應該是不支持批量讀取的吧.?

如果可以的話還請你告訴我下.

Xpath語法官方文檔:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>

??<title>Harry Potter</title>

??<price>29.99</price>

</book>

<book>

??<title>Learning XML</title>

??<price>39.95</price>

</book>

</bookstore>

選取節點

XPath?使用路徑表達式在?XML?文檔中選取節點。節點是通過沿著路徑或者?step?來選取的。

下面列出了最有用的路徑表達式:

表達式

描述

nodename

選取此節點的所有子節點

/

從根節點選取。

//

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

.

選取當前節點。

..

選取當前節點的父節點。

@

選取屬性。

實例

在下面的表格中,我們已列出了一些路徑表達式以及表達式的結果:

路徑表達式

結果

bookstore

選取?bookstore?元素的所有子節點

/bookstore

選取根元素?bookstore

注釋:假如路徑起始于正斜杠( / ),則此路徑始終代表到某元素的絕對路徑!

bookstore/book

選取屬于?bookstore?的子元素的所有?book?元素。

//book

選取所有?book?子元素,而不管它們在文檔中的位置。

bookstore//book

選擇屬于?bookstore?元素的后代的所有?book?元素,而不管它們位于?bookstore?之下的什么位置。

//@lang

選取名為?lang?的所有屬性。

謂語(Predicates

謂語用來查找某個特定的節點或者包含某個指定的值的節點。

謂語被嵌在方括號中。

實例

在下面的表格中,我們列出了帶有謂語的一些路徑表達式,以及表達式的結果:

路徑表達式

結果

/bookstore/book[1]

選取屬于?bookstore?子元素的第一個?book?元素。

/bookstore/book[last()]

選取屬于?bookstore?子元素的最后一個?book?元素。

/bookstore/book[last()-1]

選取屬于?bookstore?子元素的倒數第二個?book?元素。

/bookstore/book[position()<3]

選取最前面的兩個屬于?bookstore?元素的子元素的?book?元素。

//title[@lang]

選取所有擁有名為?lang?的屬性的?title?元素。

//title[@lang='eng']

選取所有?title?元素,且這些元素擁有值為?eng??lang?屬性。

/bookstore/book[price>35.00]

選取?bookstore?元素的所有?book?元素,且其中的?price?元素的值須大于?35.00

/bookstore/book[price>35.00]/title

選取?bookstore?元素中的?book?元素的所有?title?元素,且其中的?price?元素的值須大于?35.00

選取未知節點

XPath?通配符可用來選取未知的?XML?元素。

通配符

描述

*

匹配任何元素節點。

@*

匹配任何屬性節點。

node()

匹配任何類型的節點。

實例

在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結果:

路徑表達式

結果

/bookstore/*

選取?bookstore?元素的所有子元素。

//*

選取文檔中的所有元素。

//title[@*]

選取所有帶有屬性的?title?元素。

選取若干路徑

通過在路徑表達式中使用“|”運算符,您可以選取若干個路徑。

實例

在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結果:

路徑表達式

結果

//book/title | //book/price

選取?book?元素的所有?title??price?元素。

//title | //price

選取文檔中的所有?title??price?元素。

/bookstore/book/title | //price

選取屬于?bookstore?元素的?book?元素的所有?title?元素,以及文檔中所有的?price?元素。

轉載于:https://www.cnblogs.com/redsun1015/p/5943057.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Dom4j使用Xpath语法读取xml节点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。