xpath是一門在xml文檔中查找信息的語言。xpath用於在XML文檔中通過元素和屬性進行導航。它的返回值可能是節點,節點集合,文本,以及節點和文本的混合等。
在學習本文檔之前應該對XML的節點,元素,屬性,文本,處理指令,注釋,根節點,命名空間以及節點關系有一定的了解以及對xpath也有了解。
XML學習地址:http://www.runoob.com/xml/xml-tutorial.html
xpath基本語法學習地址:http://www.runoob.com/xpath/xpath-tutorial.html
xpath官方文檔:https://yunpan.cn/cvc4tEIGy5EvS 訪問密碼 9d16
本文主要介紹:Java中使用xpath操作對xml操作。
1)首先在dom4j中如何使用xpath技術
導入xPath支持的jar包。jaxen-1.1-beta-6.jar(首先要先導入dom4j包,dom4j下載地址:http://www.dom4j.org/dom4j-1.6.1/)。

導包之後如圖所示:

如果不知道怎樣導包請參考我以前的一篇博客:Java獲取xml節點總結之讀取xml文檔節點
2)在Java中使用xpath方法,主要有兩點:
List<Node> selectNodes("xpath表達式"); 查詢多個節點對象
Node selectSingleNode("xpath表達式"); 查詢一個節點對象
下面就用實例說明使用方法。
一、selectNodes使用方法:
1 package com.vastsum.demo;
2
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.util.List;
6
7 import org.dom4j.Document;
8 import org.dom4j.Element;
9 import org.dom4j.Node;
10 import org.dom4j.io.OutputFormat;
11 import org.dom4j.io.SAXReader;
12 import org.dom4j.io.XMLWriter;
13
14 /**
15 *
16 * @author shutu008
17 *selectNode的使用方法
18 */
19 public class xpathDemo {
20
21 public static void main(String[] args) throws Exception {
22
23 Document doc = new SAXReader().read(new File("./src/contact.xml"));
24
25 /**
26 * @param xpath 表示xpath語法變量
27 */
28 String xpath="";
29
30 /**
31 * 1. / 絕對路徑 表示從xml的根位置開始或子元素(一個層次結構)
32 */
33 xpath = "/contactList";
34 xpath = "/contactList/contact";
35
36 /**
37 * 2. // 相對路徑 表示不分任何層次結構的選擇元素。
38 */
39 xpath = "//contact/name";
40 xpath = "//name";
41
42 /**
43 * 3. * 通配符 表示匹配所有元素
44 */
45 xpath = "/contactList/*"; //根標簽contactList下的所有子標簽
46 xpath = "/contactList//*";//根標簽contactList下的所有標簽(不分層次結構)
47
48 /**
49 * 4. [] 條件 表示選擇什麼條件下的元素
50 */
51 //帶有id屬性的contact標簽
52 xpath = "//contact[@id]";
53 //第二個的contact標簽
54 xpath = "//contact[2]";
55 //選擇最後一個contact標簽
56 xpath = "//contact[last()]";
57
58 /**
59 * 5. @ 屬性 表示選擇屬性節點
60 */
61 xpath = "//@id"; //選擇id屬性節點對象,返回的是Attribute對象
62 xpath = "//contact[not(@id)]";//選擇不包含id屬性的contact標簽節點
63 xpath = "//contact[@id='002']";//選擇id屬性值為002的contact標簽
64 xpath = "//contact[@id='001' and @name='eric']";//選擇id屬性值為001,且name屬性為eric的contact標簽
65
66 /**
67 *6. text() 表示選擇文本內容
68 */
69 //選擇name標簽下的文本內容,返回Text對象
70 xpath = "//name/text()";
71 xpath = "//contact/name[text()='張三']";//選擇姓名為張三的name標簽
72
73
74 List<Node> list = doc.selectNodes(xpath);
75 for (Node node : list) {
76 System.out.println(node);
77 }
78
79 //寫出xml文件
80 //輸出位置
81 FileOutputStream out = new FileOutputStream("d:/contact.xml");
82
83 //指定格式
84 OutputFormat format = OutputFormat.createPrettyPrint();
85 format.setEncoding("utf-8");
86 XMLWriter writer = new XMLWriter(out,format);
87
88 //寫出內容
89 writer.write(doc);
90
91 //關閉資源
92 writer.close();
93
94 }
95
96
97 }
二、selectSingleNode的使用方法
1 package com.vastsum.demo;
2
3 import java.io.File;
4 import java.util.Iterator;
5
6 import org.dom4j.Attribute;
7 import org.dom4j.Document;
8 import org.dom4j.Element;
9 import org.dom4j.io.SAXReader;
10
11 /**
12 *
13 * @author shutu008
14 *selectSingleNode的使用
15 */
16 public class xpathDemo1{
17 public static void main(String[] args) throws Exception{
18 //讀取XML文件,獲得document對象
19 SAXReader saxReader = new SAXReader();
20 Document doc = saxReader.read(new File("./src/contact.xml"));
21
22 //使用xpath獲取某個節點
23 String xpath = "";
24
25 //對contact元素 id="001"的節點,操作
26 xpath = "//contact[@id = '001']";
27 Element contactElem = (Element)doc.selectSingleNode(xpath);
28
29 //設置這個節點的屬性值
30 contactElem.addAttribute("name", "001");
31
32 //輸出這個節點的所有屬性值
33 for(Iterator it = contactElem.attributeIterator();it.hasNext();){
34 Attribute conAttr = (Attribute)it.next();
35 String conTxt = conAttr.getValue();
36 String conAttrName = conAttr.getName();
37 System.out.println(conAttrName+" = "+conTxt);
38 }
39
40 }
41 }
備注:以下是操作的xml文件
