XPath

Xpath作用,四大类。

检索XML文件中的信息 绝对路径:

/根元素/子元素/孙元素 相对路径:

./子元素/孙元素

全文检索://contact

属性查找://@属性名 、//元素[@属性名]、//元素//[@属性名=‘值’]

 

引入:
Dom4J可以用于解析整个XML的数据。
但是如果要检索XML中的某些信息,建议使用XPath.(Xpath依赖Dom4j技术)
Dom4J用于解析数据,Xpath用于检索数据。
XPath使用步骤:
1.导入dom4j框架。(XPath依赖于Dom4j技术,必须先导入dom4j框架!)
2.导入XPath独有的框架包。jaxen-1.1.2.jar
XPath常用API:
List<Node> selectNodes(String var1):检索出一批节点集合。
Node selectSingleNode(String var1):检索出一个节点返回。
XPath提供的四种检索数据的写法:
1.绝对路径。
2.相对路径。
3.全文搜索。
4.属性查找。
小结:
1.绝对路径: /根元素/子元素/子元素。
2.相对路径: ./子元素/子元素。 (.代表了当前元素)
3.全文搜索:
//元素 在全文找这个元素
//元素1/元素2 在全文找元素1下面的一级元素2
//元素1//元素2 在全文找元素1下面的全部元素2
4.属性查找。
//@属性名称 在全文检索属性对象。
//元素[@属性名称] 在全文检索包含该属性的元素对象。
//元素[@属性名称=值] 在全文检索包含该属性的元素且属性值为该值的元素对象。
*/
public class XPathDemo {
/**
1.绝对路径: /根元素/子元素/子元素。
*/
@Test
public void parse01() throws Exception {
//a.创建解析器对象
SAXReader saxReader = new SAXReader();
//b.把XML加载成Document对象
Document document = saxReader.read(saxReader.getClass().getResourceAsStream("/Contacts2.xml"));
//c.检索全部的名称
List<Node> nameEles = document.selectNodes("/contactList/contact/name");
for (Node nameNode :nameEles) {
Element nameEle = (Element) nameNode; //将节点类型转为元素类型(可以转有继承关系API)
System.out.println(nameEle.getTextTrim());
}


}

/**2.相对路径: ./子元素/子元素。 (.代表了当前元素)
*/
@Test
public void parse02() throws Exception {
// a、创建解析器对象
SAXReader saxReader = new SAXReader();
// b、把XML加载成Document文档对象
Document document = saxReader.read(saxReader.getClass().getResourceAsStream("/Contacts2.xml"));
Element root = document.getRootElement();
//检索全部名称
List<Node> nameEles = root.selectNodes("./contact/name");//起点为根元素
for (Node nameNode :nameEles) {
Element nameEle = (Element) nameNode; //将节点类型转为元素类型(可以转有继承关系API)
System.out.println(nameEle.getTextTrim());
}
}

/**
3.全文搜索:
//元素 在全文找这个元素
//元素1/元素2 在全文找元素1下面的一级元素2
//元素1//元素2 在全文找元素1下面的全部元素2
*/
@Test
public void parse03() throws Exception {
// a、创建解析器对象
SAXReader saxReader = new SAXReader();
// b、把XML加载成Document文档对象
Document document =
saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));

// c.检索数据
//List<Node> nameNodes = document.selectNodes("//name");//查询所有name有西门庆
List<Node> nameNodes = document.selectNodes("//contact/name");//支找contact下的name没有西门庆
for (Node nameNode :nameNodes) {
Element nameEle = (Element) nameNode; //将节点类型转为元素类型(可以转有继承关系API)
System.out.println(nameEle.getTextTrim());
}
}

/**
4.属性查找。
//@属性名称 在全文检索属性对象。
//元素[@属性名称] 在全文检索包含该属性的元素对象。
//元素[@属性名称=值] 在全文检索包含该属性的元素且属性值为该值的元素对象。
*/
@Test
public void parse04() throws Exception {
// a、创建解析器对象
SAXReader saxReader = new SAXReader();
// b、把XML加载成Document文档对象
Document document =
saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));
// c.检索数据
List<Node> nodes = document.selectNodes("//@id");
for (Node node :nodes) {
Attribute attribute = (Attribute) node;
System.out.println(attribute.getName()+"-->"+attribute.getValue());
}

//查询name元素(包含id属性的)
//List<Node> nodes1 = document.selectNodes("//name[@id]");//寻找name中包含id属性
Node node = document.selectSingleNode("//name[@id]");//一个节点姐
Element ele = (Element)node;
System.out.println(ele.getTextTrim());

//精准定位某个元素
Node node2 = document.selectSingleNode("//name[@id=888]");
}


<?xml version="1.0" encoding="UTF-8"?>
<contactList>
<contact id="1" vip="true">
<name> 潘金莲 </name>
<gender>女</gender>
<email>panpan@itcast.cn</email>
</contact>
<contact id="2" vip="false">
<name>武松</name>
<gender>男</gender>
<email>wusong@itcast.cn</email>
</contact>
<contact id="3" vip="false">
<name>武大狼</name>
<gender>男</gender>
<email>wuda@itcast.cn</email>
</contact>
<user>
<contact>
<info>

<name>我是西门庆</name>
</info>
</contact>
</user>
</contactList>

posted on   我要当程序源  阅读(194)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示