- XPath是xml路径语言,具有强大的导航功能,可以直接获取xml文档中的节点
当xml文档的层次很多时,使用原始的获取节点的方式将会耗费大量时间和空间,而使用XPath可以迅速定位xml文档中想要的数据
获取所有节点:
- List list = document.selectNodes(“//foo/bar”);
- 获取单个节点:
- Node node = document.selectSingleNode(“//foo/bar/author”);
- XPath语法:参考W3school
一、使用实例
(1)xml文档:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架>
<书架>
<书>
<书名>数据结构</书名>
<作者>严蔚敏</作者>
<售价>200元</售价>
</书>
<书>
<书名>大话设计模式</书名>
<作者>周志华</作者>
<售价>45.0</售价>
</书>
</书架>
(2)获取第一本书的作者信息:
使用XPath快速获取作者姓名
package dom4j;
import java.io.File;
import org.dom4j.Document;
import org.dom4j.io.SAXReader;
public class Demo2 {
public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
String value = document.selectSingleNode("//作者").getText();
System.out.println(value);
}
}
(3)报错信息:
(4)改错方式:
报错内容:找不到类,类的名称是org/jaxen/NamespaceContext
表示缺少支持jar包jaxen,网上下载jar包复制到项目中:
二、案例说明
(1)xml文档
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="1" username="aaa" password="123" email="aa@sina.com" />
<user id="2" username="bbb" password="123" email="bb@sina.com" />
</users>
备注:CTRL+shift+F自动排版
(2)查找users.xml文档是否有和用户相匹配的用户名和密码
package dom4j;
import java.io.File;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class Demo3 {
public static void main(String[] args) throws DocumentException {
String username = "ccc";
String password = "123";
//检测xml文档是否有匹配的用户名和密码
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/users.xml"));
//断字符串:先打双引号,再打加号,再打名称
Node node = document.selectSingleNode("//user[@username='"+username+"'and @password='"+password+"']");
if(node==null){
System.out.println("用户名或密码错误");
}
else{
System.out.println("登陆成功");
}
}
}