首页 > 代码库 > 在Java中使用xpath对xml解析

在Java中使用xpath对xml解析

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 shutu00817  *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 shutu00814  *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>zhangsan@qq.com</email> 8         <qq>432221111</qq> 9     </contact>10     <contact id="002">11         <name>李四</name>12         <age>20</age>13         <phone>134222225555</phone>14         <email>lisi@qq.com</email>15         <qq>432222222</qq>16     </contact>17     <contactTwo>18         <name>王五</name>19         <age>32</age>20         <phone>465431341</phone>21         <emali>af@qq.com</emali>22         <qq>46164694</qq>23     </contactTwo>24     <test>测试</test>25     <test>其他用途</test>26 </contactList>
View Code

 

在Java中使用xpath对xml解析