欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mybatis学习笔记之java的XPath介绍及使用

程序员文章站 2022-04-11 17:49:42
...

XPath简介

XPath是jdk1.5提供的,与DOM解析方式搭配,解析XML文件。XPath使用路径表达式来获取XML文件指定的节点或节点集合,常见的路径表达式见下表:

表达式 表达式含义
/ 从根节点选取指定节点
// 选择文档中的任意节点,而不考虑它们的位置
. 选取当前节点
选取父节点
@ 选取属性
* 匹配任意节点
@* 选取任意属性
node() 匹配任意节点
text() 匹配文本节点
| 或语法,匹配多个节点
[] 指定条件,例如属性[@name=‘zs’],[last()]、[position() < 2]

XPath用法

1、先准备一份XML文件

<users>
    <user name="zs" age="18">
        <height>180</height>
        <weight>140</weight>
        <hobby>basketball</hobby>
    </user>
    <user name="ls" age="17">
        <height>160</height>
        <weight>160</weight>
        <hobby>basketball</hobby>
    </user>
</users>

2、创建Document对象

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
//以下几个属性可以不用写采用默认值
documentBuilderFactory.setValidating(false);
documentBuilderFactory.setNamespaceAware(false);
documentBuilderFactory.setIgnoringComments(true);
documentBuilderFactory.setIgnoringElementContentWhitespace(false);
documentBuilderFactory.setCoalescing(false);

documentBuilderFactory.setExpandEntityReferences(true);
DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
//所要解析的xml文件的位置
Document doc = builder.parse("users.xml");

3、创建XPath对象

XPathFactory factory = XPathFactory.newInstance();
XPath xPath = factory.newXPath();

4、解析XML文件
先介绍下XPathConstants对象的几个常量

1.NUMBER 映射到java的Double类型
2.STRING 映射到java的String类型
3.BOOLEAN 映射到java的Boolean类型
4.NODESET 映射到org.w3c.dom.NodeList类型
5.NODE 映射到org.w3c.dom.Node类型

//第一个参数为表达式,第二个为Document,第三个为所要解析的类型
//1、获取第一个user节点下height节点的文本节点
String height = (String) xPath.evaluate("//user/height/text()", doc,XPathConstants.STRING);
//2、获取所有height节点的文本节点
NodeList nodeLists = (NodeList) xPath.evaluate("//user/height/text()", doc,XPathConstants.NODESET);
for (int i = 0; i < nodeLists.getLength(); i++) {
    System.out.println(nodeLists.item(i).getNodeValue());
}
//3、获取name属性为zs的第一个user节点,要获取所有,第三个参数改为XPathConstants.NODESET 
Node node = (Node) xPath.evaluate("//user[@name='zs']", doc,XPathConstants.NODE);
//4、获取age < 18 的第一个user节点,要获取所有,第三个参数改为XPathConstants.NODESET 
Node node = (Node) xPath.evaluate("//user[@age<18]", doc,XPathConstants.NODE);
//5、获取第一个user节点
Node node = (Node) xPath.evaluate("//user[1]", doc,XPathConstants.NODE);
//6、获取最后一个user节点,也可以用last()减去一个数值: last() - 1
Node node = (Node) xPath.evaluate("//user[last()]", doc,XPathConstants.NODE);

Node类型也有很多种,具体参见Node类中的常量

相关标签: java java