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类中的常量
上一篇: python学习笔记(持续更新)