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文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <contactList id="0"> 3 <contact id="001" class="style" name="lisi"> 4 <name>張三</name> 5 <age>20</age> 6 <phone>134222223333</phone> 7 <email>[email protected]</email> 8 <qq>432221111</qq> 9 </contact> 10 <contact id="002"> 11 <name>李四</name> 12 <age>20</age> 13 <phone>134222225555</phone> 14 <email>[email protected]</email> 15 <qq>432222222</qq> 16 </contact> 17 <contactTwo> 18 <name>王五</name> 19 <age>32</age> 20 <phone>465431341</phone> 21 <emali>[email protected]</emali> 22 <qq>46164694</qq> 23 </contactTwo> 24 <test>測試</test> 25 <test>其他用途</test> 26 </contactList> View Code