你的位置:首页 > Java教程

[Java教程]在Java中使用xpath对xml解析

xpath是一门在在学习本文档之前应该对http://www.runoob.com/
xpath基本语法学习地址:http://www.runoob.com/xpath/xpath-tutorial.html
xpath官方文档:https://yunpan.cn/cvc4tEIGy5EvS 访问密码 9d16
本文主要介绍:Java中使用xpath操作对1)首先在dom4j中如何使用xpath技术
导入xPath支持的jar包。jaxen-1.1-beta-6.jar(首先要先导入dom4j包,dom4j下载地址:http://www.dom4j.org/dom4j-1.6.1/)。

导包之后如图所示:

如果不知道怎样导包请参考我以前的一篇博客:Java获取
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.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.));24     25     /**26      * @param xpath 表示xpath语法变量27     */28   String xpath="";29     30     /**31      * 1.   /   绝对路径   表示从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 = "[email protected]"; //选择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     //写出80     //输出位置81     FileOutputStream out = new FileOutputStream("d:/contact.);82     83     //指定格式84     OutputFormat format = OutputFormat.createPrettyPrint();85     format.setEncoding("utf-8");86     new 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     //读取19     SAXReader saxReader = new SAXReader();  20     Document doc = saxReader.read(new File("./src/contact.));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 }

 备注:以下是操作的

 1 <? 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