首页 > 代码库 > XPath详解

XPath详解

 xPath技术  

1 引入

问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!!

2 xPath作用

主要是用于快速获取所需的节点对象。

3 dom4j中如何使用xPath技术

1)导入xPath支持jar包 。  jaxen-1.1-beta-6.jar

2)使用xpath方法

List<Node>  selectNodes("xpath表达式");   查询多个节点对象

Node       selectSingleNode("xpath表达式");  查询一个节点对象

4 xPath语法

/      绝对路径      表示从xml的根位置开始或子元素(一个层次结构)

//     相对路径       表示不分任何层次结构的选择元素。

*      通配符         表示匹配所有元素

[]      条件           表示选择什么条件下的元素

@     属性            表示选择属性节点

and     关系          表示条件的与关系(等价于&&

text()    文本           表示选择文本内容

代码练习:

技术分享
package com.dom4j.xpath;

import java.io.File;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;



public class xpathExercise {
    
    public static void main(String[] args) throws Exception {
        Document doc = new SAXReader().read(new File("./src/contact.xml"));
        String xpath = "";
        xpath = "/contactList";
        xpath = "//contact/name";
        xpath = "//name";
        xpath = "/*/*/age";
        xpath = "/contactList/*";
        xpath = "/contactList//*";
        xpath = "//contact[@value]";
        xpath = "//contact[@id]";
        xpath = "//contact[2]";
        xpath = "//contact[last()]";
        xpath = "//@id";
        xpath = "//contact[not(@id)]";
        xpath = "//contact[@id=‘003‘ and @value=http://www.mamicode.com/‘hello‘]";
        xpath = "//name/text()";//返回ext
        xpath = "//contact/name[text()=‘张三‘]";
        List<Node> list = doc.selectNodes(xpath);
        for(Node node : list){
            System.out.println(node);
        }
    }

}
View Code

 5 案例

用户登录功能:

用户输入用户名和密码 -> 到“数据库”查询是否有对应的用户 ->

有: 则表示登录成功

没有: 则表示登录失败

 

xml当做数据库

user.xml   用来存储用户的数据

练习代码:

 

技术分享
package com.xpath.example;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;



public class userLogin {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入用户名:");
        String user = reader.readLine();
        
        System.out.println("请输入密码: ");
        String pwd = reader.readLine();
        
        Document doc = new SAXReader().read("./src/user.xml");
        /*
        String xpath = "/users/user";
        List<Node> list = doc.selectNodes(xpath);
        String id, name, passwd;
        for(Node node : list){
            Element auser = (Element)node;
            id = auser.attribute("id").getValue();
            name = auser.attribute("name").getValue();
            passwd = auser.attribute("password").getValue();
            if(name.equals(user) && passwd.equals(pwd)){
                System.out.println(id + "在数据库中");
            }
        }
        */
        Element userElement = (Element)doc.selectSingleNode("//user[@name=‘" + user +"‘ and @password=‘" + pwd +"‘]");
        if(userElement == null){
            System.out.println("登录失败");
        }else{
            System.out.println("登录成功");
        }
        
    }

}
View Code

 

XPath详解