Dom4J结合XPath解析XML
程序员文章站
2022-05-28 21:02:33
...
介绍
XPath 使用路径表达式来选取HTML\XML 文档中的元素节点或属性节点。节点是通过沿着路径 (path) 来选取的。XPath在解析HTML\XML文档方面提供了独树一帜的路径思想.
XPath使用步骤
步骤1:导入jar包(dom4j和jaxen-1.1-beta-6.jar)
步骤2:通过dom4j的SaxReader解析器对象,读xml文件,生成Document对象
步骤3: 利用Xpath提供的api,对XML文档中的标签或者属性进行解析操作。
document常用的api
- document.selectSingleNode(String xpath); 获得一个节点(标签\元素)
- document.selectNodes(String xpath); 获得多个节点(标签\元素)
XPath语法(了解)
- XPath表达式,就是用于选取HTML文档中节点的表达式字符串。
获取XML文档节点元素一共有如下4种XPath语法方式:- 绝对路径表达式方式 以/开头,从根标签开始的完整路径 例如: /元素/子元素/子子元素…
- 相对路径表达式方式 例如: 子元素/子子元素… 或者 ./子元素/子子元素…
- 全文搜索路径表达式方式 例如: //子元素//子子元素
- 谓语(条件筛选)方式 例如: //元素[@attr1=value]
代码
<?xml version="1.0" encoding="UTF-8"?>
<天气预报>
<北京 provide='京' id='1'>
<温度>
<最高温度 level="A">18</最高温度>
<最低温度>6</最低温度>
</温度>
<湿度>20%</湿度>
</北京>
<深圳>
<温度>
<最高温度 level="C">36</最高温度>
<最低温度>24</最低温度>
</温度>
<湿度>50%</湿度>
</深圳>
<广州>
<温度>
<最高温度 level="C">32</最高温度>
<最低温度>21</最低温度>
</温度>
<湿度>50%</湿度>
<黄浦区>
<温度>
<最高温度 level="C">31</最高温度>
<最低温度>22</最低温度>
</温度>
<湿度>50%</湿度>
</黄浦区>
<天河区>
<温度>
<最高温度 level="C">30</最高温度>
<最低温度>26</最低温度>
</温度>
<湿度>50%</湿度>
</天河区>
</广州>
</天气预报>
public class Test {
public static void main(String[] args) throws Exception {
/*
Dom4J结合XPath解析XML:
XPath使用步骤:
步骤1:导入jar包(dom4j和jaxen-1.1-beta-6.jar)
步骤2:通过dom4j的SaxReader解析器对象,获取Document对象
步骤3:利用Xpath提供的api,结合xpath的语法完成选取XML文档元素节点进行解析操作。
document\Element常用的api
- Node selectSingleNode(String xpath); 获得一个节点(标签,元素),传入符合XPATH语法的节点路径
- Node selectNodes(String xpath); 获得多个节点(标签,元素),传入符合XPATH语法的节点路径
XPATH路径语法:
1. 绝对路径表达式方式 例如: /元素/子元素/子子元素...
以/开头的路径叫做是绝对路径,绝对路径要从根元素开始写
2. 相对路径表达式方式 例如: 子元素/子子元素.. 或者 ./子元素/子子元素..
相对路径就是相对当前节点元素位置继续查找节点,不以/开头, ../ 表示上一个元素, ./表示当前元素
3. 全文搜索路径表达式方式 例如: //子元素//子子元素... //子元素/子子元素...
代表不论中间有多少层,直接获取所有子元素中满足条件的元素
4. 谓语(条件筛选)方式 例如: //元素[@属性名=属性值]
根据条件过滤判断进行选取节点
*/
// 1.创建解析器对象
SAXReader sr = new SAXReader();
// 2.读取xml文件,生成Document对象
Document d = sr.read("day14\\tianqi.xml");
// 绝对路径表达式方式: 获取广州天河区的湿度标签的文本
// 1.获得湿度标签
// Element继承Node
Element e1 = (Element) d.selectSingleNode("/天气预报/广州/天河区/湿度");
// 2.根据湿度标签获得文本
System.out.println("e1:" + e1.getText());// 50%
// 相对路径表达式方式: 相对于e1标签,获取深圳的湿度
Element e2 = (Element)e1.selectSingleNode("../../../深圳/湿度");
System.out.println("e2:" + e2.getText());
// 全文搜索路径表达式方式: 所有的最高温度
List<Element> list = d.selectNodes("//最高温度");
for (Element e : list) {
System.out.println(e.getName()+",文本:"+e.getText()+",属性:"+e.attributeValue("level"));
}
System.out.println("===================");
// 谓语(条件筛选)方式 : 获取所有最高温度等级为C的标签
List<Element> list1 = d.selectNodes("//最高温度[@level='C']");
for (Element e : list1) {
System.out.println(e.getName()+",文本:"+e.getText()+",属性:"+e.attributeValue("level"));
}
}
}
上一篇: dom事件与setTimeout
推荐阅读
-
java使用dom4j生成与解析xml文档的方法示例
-
XML文档的解析—dom4j
-
java xml解析方式(DOM、SAX、JDOM、DOM4J)
-
java基础 xml 使用dom4j解析 xml文件 servlet根据pattern 找到class
-
dom4j解析XML时出现"java.lang.noclassdeffounderror: org/jaxen/jaxenexception"错误
-
dom4j解析XML时出现"java.lang.noclassdeffounderror: org/jaxen/jaxenexception"错误
-
Dom4J解析使用xpath java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常
-
Dom4J解析使用xpath java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常
-
Java程序员从笨鸟到菜鸟之(二十七)XML之Jdom和DOM4J解析 .
-
XML--jdom/dom4j/sax解析XML文件