XML解析--xPath技术

xPath技术解决了dom4j查询比较深层次结构的节点比较繁琐复杂的问题。主要作用是用于快速获取所需的节点对象。xPath是在dom4j中的,使用时需要导入jaxen-1.1-beta-6.jar。

xPath常用的方法

List<Node>  selectNodes("xpath表达式");   查询多个节点对象

Node selectSingleNode("xpath表达式");  查询一个节点对象

xPath表达式语法

  /      绝对路径      表示从xml的根位置开始或子元素(一个层次结构)

  //     相对路径       表示不分任何层次结构的选择元素。

  *      通配符         表示匹配所有元素

  []      条件           表示选择什么条件下的元素

  @     属性            表示选择属性节点

  and     关系          表示条件的与关系(等价于&&)

  text()    文本           表示选择文本内容

表达式使用说明案例

contact.xml文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <contactList>
 3     <contact id="001">
 4         <name>张三</name>
 5         <age>20</age>
 6         <mobile>15215413777</mobile>
 7         <email>play@126.com</email>
 8         <qq>435345345</qq>
 9     </contact>
10     <contact id="002">
11         <name>李四</name>
12         <age>21</age>
13         <mobile>15215413888</mobile>
14         <email>play@126.com</email>
15         <qq>3234234234</qq>
16     </contact>
17 </contactList>

xPath使用案例

 1 String xpath = "";
 2         
 3         /**
 4          * 1.      /      绝对路径      表示从xml的根位置开始或子元素(一个层次结构)
 5          */
 6         xpath = "/contactList";
 7         xpath = "/contactList/contact";
 8         
 9         /**
10          * 2. //     相对路径       表示不分任何层次结构的选择元素。
11          */
12         xpath = "//contact/name";
13         xpath = "//name";
14         
15         /**
16          * 3. *      通配符         表示匹配所有元素
17          */
18         xpath = "/contactList/*"; //根标签contactList下的所有子标签
19         xpath = "/contactList//*";//根标签contactList下的所有标签(不分层次结构)
20         
21         /**
22          * 4. []      条件           表示选择什么条件下的元素
23          */
24         //带有id属性的contact标签
25         xpath = "//contact[@id]";
26         //第二个的contact标签
27         xpath = "//contact[2]";
28         //选择最后一个contact标签
29         xpath = "//contact[last()]";
30         
31         /**
32          * 5. @     属性            表示选择属性节点
33          */
34         xpath = "//@id"; //选择id属性节点对象,返回的是Attribute对象
35         xpath = "//contact[not(@id)]";//选择不包含id属性的contact标签节点
36         xpath = "//contact[@id='002']";//选择id属性值为002的contact标签
37         xpath = "//contact[@id='001' and @name='eric']";//选择id属性值为001,且name属性为eric的contact标签
38         
39         /**
40          *6.  text()   表示选择文本内容
41          */
42         //选择name标签下的文本内容,返回Text对象
43         xpath = "//name/text()";
44         xpath = "//contact/name[text()='张三']";//选择姓名为张三的name标签

代码示例:

删除id属性为002的标签,并删除

 1 import java.io.File;
 2 import java.io.FileOutputStream;
 3 
 4 
 5 import org.dom4j.Document;
 6 import org.dom4j.DocumentException;
 7 import org.dom4j.Element;
 8 import org.dom4j.io.OutputFormat;
 9 import org.dom4j.io.SAXReader;
10 import org.dom4j.io.XMLWriter;
11 
12 public class Dom4jTest {
13 
14     public static void main(String[] args) throws Exception{
15         Document doc = new SAXReader().read(new File("./src/contact.xml"));
16         //使用xPatch查询id为002的记录
17         Element elem = (Element)doc.selectSingleNode("//contact[@id='002']");
18         System.out.println(elem);
19         elem.detach();
20         FileOutputStream outputStream = new FileOutputStream(new File("/Users/nick/Desktop/nkcontact.xml"));
21         OutputFormat outputFormat = OutputFormat.createPrettyPrint();
22         XMLWriter writer = new XMLWriter(outputStream,outputFormat);
23         writer.write(doc);
24         writer.close();
25     }
26 
27 }
原文地址:https://www.cnblogs.com/nicker/p/6437481.html