在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 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>

时间: 2024-09-30 20:19:23

在Java中使用xpath对xml解析的相关文章

Java中使用Jackson进行JSON解析和序列化

Java中使用Jackson进行JSON解析和序列化 1.添加依赖,在Maven的pom.xml文件中添加以下依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.3</version> </dependency> 2.封装JSON解

java中构造方法和方法全面解析

java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望大家多多讨论.          构造方法和方法的区别: 构造方法要与类名相同,无返回类型,在类初始化的时候调用.      方法最好与类名不同,对象调用,静态方法可用类名.方法(). 构造器和方法在下面三个方面区别:修饰符,返回值,命名. 1.和方法一样,构造器可以有任何访问的修饰: public

Android中的三种XML解析方式

在Android中提供了三种解析XML的方式:SAX(Simple API XML),DOM(Document Objrect Model),以及Android推荐的Pull解析方式.下面就对三种解析方式一一详细阐述. 假设要要解析person.xml文档 <?xml version="1.0" encoding="UTF-8"?><persons>  <person id="1">    <name&g

Java中String对象的传递解析

话不多说了,直接上代码. public class Demo { // static String str = "hello world!"; // static String str = new String("hello world!"); // static char[] ch = new char[]{'A','B','C'}; public static void test(String str,char[] ch,int a) { System.out.

Java中4大基本加密算法解析

简单的java加密算法有: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm,安全散列算法) HMAC(Hash Message Authentication Code,散列消息鉴别码) 1. BASE64 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于

java中访问权限修饰符解析

访问权限控制修饰符:public protected 默认(default) private this static super final abstract 其中abstract这个修饰符脾气很大,这个修饰符不能与static private final共存对于final,表示最终,final修饰变量,那么这个变量第一次被赋值后,就不能被再次赋值,也可以把它理解为常量,注意内存空间里面的常量池...这是方法区里面一块特殊的内存空间...final修饰类,表示这个类是最终类,也就是说,不能有子类

Java中 for循环的用法解析

在Java程序中,要“逐一处理”――或者说,“遍历”――某一个数组或Collection中的元素的时候,一般会使用一个for循环来实现(当然,用其它种类的循环也不是不可以,只是不知道是因为for这个词的长度比较短,还是因为for这个词的含义和这种操作比较配,在这种时候for循环比其它循环常用得多).J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象.本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类

java中volatile关键字的含义解析及用途

在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制. synchronized 同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synchronized 和 块语句,在多线程访问的时候,同一时刻只能有一个线程能够用 synchronized 修饰的方法 或者 代码块.

Java中JAVA_HOME与CLASSPATH的解析(转)

很多人在初学Java的时候经常会被书中介绍的一堆环境变量的设置搞得头昏脑胀,很多书中都会在初装JDK的时候让他大家设置JAVA_HOME环境变量,在开发程序的时候设置CLASSPATH环境变量,而很多人并不理解这两个环境变量的作用,我们来分别进行详细的阐述.    首先是JAVA_HOME环境变量,我们先来掌握这个环境变量的设置内容,JAVA_HOME这个环境变量的设置内容是JDK的安装目录,比如说您的JDK安装在d:\jdk1.6.0这个目录下,请您查看一下这个目录下是不是有一个子目录bin,