我们可以使用Xpath的语法来轻易的读取xml的某个节点[类似于jQuery的选择器]:
使用Xpath语法需要添加新的jaxen-1.1-beta-7.rar 这个jar包
dom4j完整jar包我已上传地址:
http://download.csdn.net/source/3095860
未加入jaxen-1.1-beta-7.rar jar 报错如下:
Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
at org.dom4j.tree.AbstractNode.selectSingleNode(AbstractNode.java:183)
at com.demo.database.DataBaseConnect.main(DataBaseConnect.java:16)
Demo:
src目录下 employee.xml文件
例如要获得id为1或者2的employee节点:
表达式:Element database = (Element) root.selectSingleNode("//employee[@id='2']");
输出为:
name: wTang2
age: 20
high: 180
表达式: Element database = (Element) root.selectSingleNode("/root/employee[1]");
输出为:
name: wTang
age: 19
high: 173
我们可以给id里面的值做个参数, 封装为方法即可给外界调用.
// 表示 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
/ 表示 从根节点选取。
@和jq的属性选择器类似 选择id=2为2的节点
[1] 表示获取employee的第一个元素,[2]就表示第二个了.
Xpath的语法灵活多变,只写这么点了.读取单个节点可以选择Xpath.
疑问:
xPath好像不能一次读取整个xml文件
比如: /root//employee
返回的是一个封装的List 长度为3
如果是List做嵌套那么List的长度应该是2,再嵌套2个List.
结果只读取到了1个employee(3个节点).Xpath应该是不支持批量读取的吧.
如果可以的话还请你告诉我下.
Xpath语法官方文档:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>