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