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 selectnodes(xpath表达式); 查询多个节点对象
node selectsinglenode(xpath表达式); 查询一个节点对象
下面就用实例说明使用方法。
一、selectnodes使用方法:
package com.vastsum.demo;
import java.io.file;
import java.io.fileoutputstream;
import java.util.list;
import org.dom4j.document;
import org.dom4j.element;
import org.dom4j.node;
import org.dom4j.io.outputformat;
import org.dom4j.io.saxreader;
import org.dom4j.io.xmlwriter;
/**
*
* @author shutu008
*selectnode的使用方法
*/
public class xpathdemo {
public static void main(string[] args) throws exception {
document doc = new saxreader().read(new file(./src/contact.xml));
/**
* @param xpath 表示xpath语法变量
*/
string xpath=;
/**
* 1. / 绝对路径 表示从xml的根位置开始或子元素(一个层次结构)
*/
xpath = /contactlist;
xpath = /contactlist/contact;
/**
* 2. // 相对路径 表示不分任何层次结构的选择元素。
*/
xpath = //contact/name;
xpath = //name;
/**
* 3. * 通配符 表示匹配所有元素
*/
xpath = /contactlist/*; //根标签contactlist下的所有子标签
xpath = /contactlist//*;//根标签contactlist下的所有标签(不分层次结构)
/**
* 4. [] 条件 表示选择什么条件下的元素
*/
//带有id属性的contact标签
xpath = //contact[@id];
//第二个的contact标签
xpath = //contact[2];
//选择最后一个contact标签
xpath = //contact[last()];
/**
* 5. @ 属性 表示选择属性节点
*/
xpath = //@id; //选择id属性节点对象,返回的是attribute对象
xpath = //contact[not(@id)];//选择不包含id属性的contact标签节点
xpath = //contact[@id='002'];//选择id属性值为002的contact标签
xpath = //contact[@id='001' and @name='eric'];//选择id属性值为001,且name属性为eric的contact标签
/**
*6. text() 表示选择文本内容
*/
//选择name标签下的文本内容,返回text对象
xpath = //name/text();
xpath = //contact/name[text()='张三'];//选择姓名为张三的name标签
list list = doc.selectnodes(xpath);
for (node node : list) {
system.out.println(node);
}
//写出xml文件
//输出位置
fileoutputstream out = new fileoutputstream(d:/contact.xml);
//指定格式
outputformat format = outputformat.createprettyprint();
format.setencoding(utf-8);
xmlwriter writer = new xmlwriter(out,format);
//写出内容
writer.write(doc);
//关闭资源
writer.close();
}
}
二、selectsinglenode的使用方法
package com.vastsum.demo;
import java.io.file;
import java.util.iterator;
import org.dom4j.attribute;
import org.dom4j.document;
import org.dom4j.element;
import org.dom4j.io.saxreader;
/**
*
* @author shutu008
*selectsinglenode的使用
*/
public class xpathdemo1{
public static void main(string[] args) throws exception{
//读取xml文件,获得document对象
saxreader saxreader = new saxreader();
document doc = saxreader.read(new file(./src/contact.xml));
//使用xpath获取某个节点
string xpath = ;
//对contact元素 id=001的节点,操作
xpath = //contact[@id = '001'];
element contactelem = (element)doc.selectsinglenode(xpath);
//设置这个节点的属性值
contactelem.addattribute(name, 001);
//输出这个节点的所有属性值
for(iterator it = contactelem.attributeiterator();it.hasnext();){
attribute conattr = (attribute)it.next();
string contxt = conattr.getvalue();
string conattrname = conattr.getname();
system.out.println(conattrname+ = +contxt);
}
}
}