由于dom4j在获取某个节点时都得一级一级往下获,很不方便。
由于XPath表达式,获取某个节点很方便直观,所以就要由dom4j API 结合XPath表达式来获取节点,然后对节点进行某些操作。
- XPath快速入门,查看官方帮助文档:XPathTutorial.chm
- dom4j API 与XPath的结合,要看dom4j的docs里面的Quick Start:Powerful Navigation with XPath
- 获取多个节点:Listlist = document. selectNodes ("//foo/bar");
- 获取单个节点:Nodenode = document. selectSingleNode ("//foo/bar/author");
- 获取多个节点:Listlist = document. selectNodes ("//foo/bar");
- 获取单个节点:Nodenode = document. selectSingleNode ("//foo/bar/author");
创建XPath需要jaxen.jar包的支持。如没有导入可能会报错:java.lang.NoClassDefFoundError: org/jaxen/JaxenException
练习一:
book.xml
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书 name="yyyYYY">
<书名>Java就业培训教程</书名>
<售价>999</售价>
<售价>999</售价>
<作者>张孝祥</作者>
<售价>20元</售价>
<售价>20元</售价>
</书>
<书>
<书名>JavaScript网页开发</书名>
<作者>张孝祥</作者>
<售价>28.00元</售价>
</书>
</书架>
//获取第二个书名的值
@Test
public void findwithXpath() throws DocumentException{
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml");
//获取第二个书名的值
Element ele = (Element)document.selectNodes("//书名").get(1);
System.out.println(ele.getText());
}
练习二:
users.xml
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user username="lisi" password="123"></user>
<user username="wanghong" password="123"></user>
<user username="hehe" password="123"></user>
</users>
//用户登录
@Test
public void login() throws DocumentException{
SAXReader reader = new SAXReader();
Document document = reader.read("src/u