Dom4j使用Xpath语法读取xml节点
表達(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UNITY3D单词学习 speed和ve
- 下一篇: 转:Hash, MAC,HMAC说明