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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dom4j使用Xpath语法读取xml节点

發(fā)布時(shí)間:2024/4/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dom4j使用Xpath语法读取xml节点 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
<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基礎(chǔ)操作 ?*? ?*?@author?wTang ?*?@editTime?2011年3月16日0:38:10 ?*? ?*/ public?class?Dom4jParser?{ public?static?void?main(String[]?args)?{ try?{ SAXReader?sax?=?new?SAXReader(); //?獲得dom4j的文檔對(duì)象 Document?root?=?sax.read(Dom4jParser.class.getClassLoader() .getResourceAsStream("employee.xml")); //?得到database節(jié)點(diǎn) Element?database?=?(Element)?root .selectSingleNode("//employee[@id='2']"); List?list?=?database.elements();?//?得到database元素下的子元素集合 /* ?*?循環(huán)遍歷集合中的每一個(gè)元素?將每一個(gè)元素的元素名和值在控制臺(tái)中打印出來 ?*/ for?(Object?obj?:?list)?{ Element?element?=?(Element)?obj; //?getName()是元素名,getText()是元素值 System.out .println(element.getName()?+?":?"?+?element.getText()); } }?catch?(Exception?e)?{ e.printStackTrace(); } } }</span>

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

輸出為:

name: wTang2
age: 20

high: 180

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

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

我們可以給id里面的值做個(gè)參數(shù), 封裝為方法即可給外界調(diào)用.

// ? ? 表示 ? ? ?從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不考慮它們的位置。

/ ? ? ?表示 ? ? ?從根節(jié)點(diǎn)選取。?

@和jq的屬性選擇器類似 ?選擇id=2為2的節(jié)點(diǎn)

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

Xpath的語法靈活多變,只寫這么點(diǎn)了.讀取單個(gè)節(jié)點(diǎn)可以選擇Xpath.

疑問:

xPath好像不能一次讀取整個(gè)xml文件 ?

比如: ?/root//employee ??

返回的是一個(gè)封裝的List ?長度為3

如果是List做嵌套那么List的長度應(yīng)該是2,再嵌套2個(gè)List.

結(jié)果只讀取到了1個(gè)employee(3個(gè)節(jié)點(diǎn)).Xpath應(yīng)該是不支持批量讀取的吧.?

如果可以的話還請(qǐng)你告訴我下.

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>

選取節(jié)點(diǎn)

XPath?使用路徑表達(dá)式在?XML?文檔中選取節(jié)點(diǎn)。節(jié)點(diǎn)是通過沿著路徑或者?step?來選取的。

下面列出了最有用的路徑表達(dá)式:

表達(dá)式

描述

nodename

選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)

/

從根節(jié)點(diǎn)選取。

//

從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不考慮它們的位置。

.

選取當(dāng)前節(jié)點(diǎn)。

..

選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)。

@

選取屬性。

實(shí)例

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

路徑表達(dá)式

結(jié)果

bookstore

選取?bookstore?元素的所有子節(jié)點(diǎn)

/bookstore

選取根元素?bookstore

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

bookstore/book

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

//book

選取所有?book?子元素,而不管它們?cè)谖臋n中的位置。

bookstore//book

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

//@lang

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

謂語(Predicates

謂語用來查找某個(gè)特定的節(jié)點(diǎn)或者包含某個(gè)指定的值的節(jié)點(diǎn)。

謂語被嵌在方括號(hào)中。

實(shí)例

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

路徑表達(dá)式

結(jié)果

/bookstore/book[1]

選取屬于?bookstore?子元素的第一個(gè)?book?元素。

/bookstore/book[last()]

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

/bookstore/book[last()-1]

選取屬于?bookstore?子元素的倒數(shù)第二個(gè)?book?元素。

/bookstore/book[position()<3]

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

//title[@lang]

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

//title[@lang='eng']

選取所有?title?元素,且這些元素?fù)碛兄禐?span style="font-size:11px;font-family:Arial, sans-serif;">?eng??lang?屬性。

/bookstore/book[price>35.00]

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

/bookstore/book[price>35.00]/title

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

選取未知節(jié)點(diǎn)

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

通配符

描述

*

匹配任何元素節(jié)點(diǎn)。

@*

匹配任何屬性節(jié)點(diǎn)。

node()

匹配任何類型的節(jié)點(diǎn)。

實(shí)例

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

路徑表達(dá)式

結(jié)果

/bookstore/*

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

//*

選取文檔中的所有元素。

//title[@*]

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

選取若干路徑

通過在路徑表達(dá)式中使用“|”運(yùn)算符,您可以選取若干個(gè)路徑。

實(shí)例

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

路徑表達(dá)式

結(jié)果

//book/title | //book/price

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

//title | //price

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

/bookstore/book/title | //price

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

轉(zhuǎn)載于:https://www.cnblogs.com/redsun1015/p/5943057.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。