04 xPath 技术入门

xPath详细教程:

http://zvon.org/xxl/XPathTutorial/General_chi/examples.html)

xPath在dom4j中的使用:

  1. 在项目中导入xpath支持jar包。jaxen-1.1-beta-6.jar
  1. 使用dom4j提供的xpath方法
  • selectNodes(xpath表达式): 查询符合条件的多个节点对象
  • selectSingleNode(xpath表达式) 查询符合条件的一个节点对象

xPath表达式语法:

/ :严格路径层级结构,如果在名首表示整个文档
//:不考虑层级结构
*:通配符 返回所有标签
[ ]:条件 返回带条件的标签。例如 first() last()
@:属性 返回属性
and: 逻辑与判断
=:标签属性判断
text():返回文本

xPath演练:

Paste_Image.png
public class demo03 {
    public static void main(String[] args) throws Exception {
        //1)读取xml文件
        Document doc = new SAXReader().read(new File("./src/contact.xml"));
        
        //2)利用xpath方法查询xml文件
        String xpath = "";
        
        //2.1    / 
        xpath = "/contact-list"; //查询根标签contact-list
        xpath = "/contact-list/contact"; //查询contact-list根标签下的contact子标签
        
        
        //2.2   // 
        xpath = "//contact"; //选择任意层级的contact标签(不分层次)
        xpath = "//contact/name"; //选择所有父标签是contact的name标签
        
        //2.3   *
        xpath = "/contact-list/*"; //选择根据标签contact-list下的所有子标签
        xpath = "/contact-list//*"; //选择根标签contact-list下的所有后代标签(不分层次结构)
        
        
        //2.4 [ ]
        xpath = "//contact[1]";// 任意层级下的第一个contact标签
        xpath = "//contact[last()]";//最后一个contact标签
        
        //2.5 @ 
        xpath = "//@id"; // 选择所有id属性
        xpath = "//contact[@id]"; //选择所有包含id属性的contact标签
        //xpath = "//contact[@id][1]"; //选择所有包含id属性的contact的第一个标签
        
        
        //2.6 = 
        xpath = "//contact[@id='002']"; //选择id属性值为002的contact标签
        
        //2.7 and  逻辑与
        //选取id属性为002,且name属性为eric的contact标签
        xpath = "//contact[@id='002' and @name='eric']";
        
        //2.8   text()   选取文本
        xpath = "//contact[@id='001']/name[1]/text()";//选择第一个name标签的文本
        xpath = "//name[text()='丁昌江']";//文本内容为“丁昌江”的name标签
        
        List<Node> list = doc.selectNodes(xpath);
        for (Node node : list) {
            System.out.println(node);
        }
        
    }
}

练习:

Paste_Image.png
public class demo04 {

    public static void main(String[] args) throws DocumentException {
        SAXReader saxReader = new SAXReader();
        //1.读取xml文档
        Document doc = saxReader.read("./src/user.xml");
        System.out.println("请输入用户名:");
        //2.获取用户输入的用户名
        String name = new Scanner(System.in).nextLine();
        //3.匹配用户名是否存在
        String userName = String.format("//name[text()='%s']", name);
        if (doc.selectSingleNode(userName)!=null){
            System.out.println("请输入密码:");
            //4.获取用户输入的密码:
            String passwd = new Scanner(System.in).nextLine();
            String userPasswd = String.format("//name[text()='%s']", passwd);
            //5.匹配用户输入的密码
            if(doc.selectSingleNode(userPasswd)!=null){
                System.out.println("登陆成功");
            }else{
                System.out.println("密码错误");
            }
        }else{
            System.out.println("用户名不存在");
        }
    }
}

注意:
"/"在行首表示的是当前的整个文档,而不是<contact-list>标签,<contact-list>标签是其的第一个子标签;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,953评论 6 342
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,276评论 9 118
  • 1. XML总结 1.1. XML简介 XML : 可扩展的标记语言。(和HTML非常类似的) 可扩展的。 自定义...
    Ethan_Walker阅读 3,117评论 0 12
  • 文/产品经理许姗姗 前言:应合得Olive老师邀请,写写参与两门课学习心得。其实,不邀请,我也写。作为一个互联网产...
    许姗姗S阅读 4,828评论 0 5