dom4j 操作XML檔案

2021-08-16 16:11:00 字數 3685 閱讀 3663

簡單說,xpath就是選擇xml檔案中節點的方法。

所謂節點(node),就是xml檔案的最小構成單位,一共分成7種。

- element(元素節點)

- attribute(屬性節點)

- text (文字節點)

- namespace (命名空間節點)

- processing-instruction (處理命令節點)

- comment (注釋節點)

- root (根節點)

xpath可以用來選擇這7種節點。不過,下面的筆記只涉及最常用的第一種element(元素節點),因此可以將下文中的節點和元素視為同義詞。

一、xpath表示式的基本格式

xpath通過"路徑表示式"(path expression)來選擇節點。在形式上,"路徑表示式"與傳統的檔案系統非常類似。

# 斜槓(/)作為路徑內部的分割符。

# 同乙個節點有絕對路徑和相對路徑兩種寫法。

# 絕對路徑(absolute path)必須用"/"起首,後面緊跟根節點,比如/step/step/...。

# 相對路徑(relative path)則是除了絕對路徑以外的其他寫法,比如 step/step,也就是不使用"/"起首。

# "."表示當前節點。

# ".."表示當前節點的父節點

二、選擇節點的基本規則

- nodename(節點名稱):表示選擇該節點的所有子節點

- "/":表示選擇根節點

- "//":表示選擇任意位置的某個節點

- "@": 表示選擇某個屬性

三、選擇節點的例項

先看乙個xml例項文件。

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

harry potter

29.99

learning xml

39.95

[例1]

bookstore :選取 bookstore 元素的所有子節點。

[例2]

/bookstore :選取根節點bookstore,這是絕對路徑寫法。

[例3]

bookstore/book :選取所有屬於 bookstore 的子元素的 book元素,這是相對路徑寫法。

[例4]

//book :選擇所有 book 子元素,而不管它們在文件中的位置。

[例5]

bookstore//book :選擇所有屬於 bookstore 元素的後代的 book 元素,而不管它們位於 bookstore 之下的什麼位置。

[例6]

//@lang :選取所有名為 lang 的屬性。

四、xpath的謂語條件(predicate)

所謂"謂語條件",就是對路徑表示式的附加條件。

所有的條件,都寫在方括號""中,表示對節點進行進一步的篩選。

[例7]

/bookstore/book[1] :表示選擇bookstore的第乙個book子元素。

[例8]

/bookstore/book[last()] :表示選擇bookstore的最後乙個book子元素。

[例9]

/bookstore/book[last()-1] :表示選擇bookstore的倒數第二個book子元素。

[例10]

/bookstore/book[position()<3] :表示選擇bookstore的前兩個book子元素。

[例11]

//title[@lang] :表示選擇所有具有lang屬性的title節點。

[例12]

//title[@lang='eng'] :表示選擇所有lang屬性的值等於"eng"的title節點。

[例13]

/bookstore/book[price] :表示選擇bookstore的book子元素,且被選中的book元素必須帶有price子元素。

[例14]

/bookstore/book[price>35.00] :表示選擇bookstore的book子元素,且被選中的book元素的price子元素值必須大於35。

[例15]

/bookstore/book[price>35.00]/title :表示在例14結果集中,選擇title子元素。

[例16]

/bookstore/book/price[.>35.00] :表示選擇值大於35的"/bookstore/book"的price子元素。

五、萬用字元

# "*"表示匹配任何元素節點。

# "@*"表示匹配任何屬性值。

# node()表示匹配任何型別的節點。

[例17]

//* :選擇文件中的所有元素節點。

[例18]

/*/* :表示選擇所有第二層的元素節點。

[例19]

/bookstore/* :表示選擇bookstore的所有元素子節點。

[例20]

//title[@*] :表示選擇所有帶有屬性的title元素。

六、選擇多個路徑

用"|"選擇多個並列的路徑。

[例21]

//book/title | //book/price :表示同時選擇book元素的title子元素和price子元素。

對xml

的節點進行簡單查詢的時候,常用的可以使用如下方法:

(1) 

xmlnode node = doc.selectsinglenode("//allnode/node[@id = 

』aaa

』]");

在整個xml中查詢allnode節點下的節點名為node的節點,該子節點的id屬性值為aaa

(2)xmlnode node = doc.selectsinglenode("//allnode /*[@id = 

』aaa

』]");

在整個xml中查詢allnode節點下的節點,該子節點的id屬性值為aaa

(3) 

xmlnode node = doc.selectsinglenode("//allnode/node[@id = 

』aaa

』and @name = 

『bbb

』]");

在整個xml中查詢allnode節點下的節點名為node的節點,該子節點的id屬性值為aaa,且name屬性為bbb

(4) 

xmlnode node = doc.selectsinglenode("//allnode[node = 

』aaa

』]");

在整個xml中查詢allnode節點下的節點名為node的節點,該子節點的內容為aaa

(5) 

xmlnode node = doc.selectsinglenode("//allnode/node[@id = 

』aaa

』]/childnode[@id=

』bbb

』]");

在整個xml中查詢allnode節點下node節點的子節點childnode,且node節點的id值為aaa,childnode節點的id值為bbb

注:請切記條件值須使用單引號括住,否則會導致查詢語句語法錯誤。

dom4j操作 xml檔案

父類 public class ba mlconfig public static void initconfig string rootelement,file xmlconfig throws exception fileoutputstream fos new fileoutputstream...

Dom4j操作xml檔案

dom4jgroupid dom4jartifactid 1.6.1version dependency author 天蠶土豆 鬥破蒼穹name 86price book author 蕭潛 縹緲之旅name 92price book author 蕭鼎 誅仙name 98price book a...

dom4j 使用dom4j生成xml

使用org.dom4j.element 建立xml 生成service.xml檔案 param tran 交易物件 param filepath 資料夾路徑 public static void exportservicexml listtranlist,string filepath servic...