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演练:

04 xPath 技术入门_第1张图片
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 list = doc.selectNodes(xpath);
        for (Node node : list) {
            System.out.println(node);
        }
        
    }
}

练习:

04 xPath 技术入门_第2张图片
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("用户名不存在");
        }
    }
}

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

你可能感兴趣的:(04 xPath 技术入门)