Javaweb-xml编程-XPath

来源:互联网 发布:gmp系统网络的搭建 编辑:程序博客网 时间:2024/06/05 20:15
  • 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("登陆成功");        }    }}