Day 27:Xpath技术

 xPath技术  

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

xPath作用

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

dom4j中如何使用xPath技术

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

        2、使用xpath方法

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

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

xPath语法

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

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

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

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

         @     属性            表示选择属性节点

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

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

作业:

用户登录功能:

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

        有: 则表示登录成功

        没有: 则表示登录失败

        用xml当做数据库

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

 

import java.io.File;
import java.io.FileOutputStream;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Demo2 {

    public static void main(String[] args) throws Exception{
        // 需求: 删除id值为2的学生标签
        Document doc = new SAXReader().read(new File("F:/a.xml"));
        //1.查询id为2的学生标签
        //使用xpath技术
        Element stuElem = (Element)doc.selectSingleNode("//Student[@id='2']");
        //2.删除标签
        stuElem.detach();
        //3.写出xml文件
        FileOutputStream out = new FileOutputStream("e:/student.xml");
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("utf-8");
        XMLWriter writer = new XMLWriter(out,format);
        writer.write(doc);
        writer.close();
    }

}
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class Demo3 {

    public static void main(String[] args) throws Exception {
        Document doc = new SAXReader().read(new File("./src/contact.xml"));
        
        String xpath = "";
        /**
         * 1.绝对路径, 表示从xml的根位置开始或子元素(一个层次结构)
         */
        xpath = "/contactList";
        xpath = "/contactList/contact";
        /**
         * 2.相对路径, 表示不分任何层次结构的选择元素。
         */
        xpath = "//contact/name";
        xpath = "//name";
        /**
         * 3. 通配符,表示匹配所有元素
         */
        xpath = "/contactList/*"; 
        xpath = "/contactList//*";
        /**
         * 4.条件,表示选择什么条件下的元素
         */
        //带有id属性的contact标签
        xpath = "//contact[@id]";
        //第二个的contact标签
        xpath = "//contact[2]";
        //选择最后一个contact标签
        xpath = "//contact[last()]";
        /**
         * 5.属性,表示选择属性节点
         */
        xpath = "//@id"; 
        xpath = "//contact[not(@id)]";
        xpath = "//contact[@id='002']";
        xpath = "//contact[@id='001' and @name='eric']";
        /**
         *6.表示选择文本内容
         */
        //选择name标签下的文本内容,返回Text对象
        xpath = "//name/text()";
        xpath = "//contact/name[text()='李杰']";
        List<Node> list = doc.selectNodes(xpath);
        for (Node node : list) {
            System.out.println(node);
        }
    }
}

//模拟登陆

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Demo4 {

    public static void main(String[] args)throws Exception{
        //1.获取用户输入的用户名和密码
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入用户名:");
        String name = br.readLine();
        System.out.println("请输入密码:");
        String password = br.readLine();
        //2.到“数据库”中查询是否有对应的用户
        Document doc = new SAXReader().read(new File("./src/user.xml"));
        Element userElem = (Element)doc.selectSingleNode("//user[@name='" +name +"' and @password='"+password+"']");
        
        if(userElem!=null){
            System.out.println("登录成功");
        }else{
            System.out.println("登录失败");
        }
    }
}
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Demo5 {

    public static void main(String[] args) throws Exception{
        Document doc = new SAXReader().read(new File("./src/personList.html"));
        //读取title标签
        Element titleElem = (Element)doc.selectSingleNode("//title");
        String title = titleElem.getText();
        System.out.println(title);
        //1.读取出所有tbody中的tr标签
        List<Element> list = (List<Element>)doc.selectNodes("//tbody/tr");
        //2.遍历
        for (Element elem : list) {
            String id = elem.selectSingleNode("td[1]").getText();
            String name = ((Element)elem.elements().get(1)).getText();
            String gender = ((Element)elem.elements().get(2)).getText();
            String age = ((Element)elem.elements().get(3)).getText();
            String address = ((Element)elem.elements().get(4)).getText();
            String phone = ((Element)elem.elements().get(5)).getText();
            System.out.println("编号:"+id+"	姓名:"+name+"	性别:"+gender+"	年龄:"+age+"	地址:"+address+"	电话:"+phone);
        }
    }
}
原文地址:https://www.cnblogs.com/JYDesigner/p/9463303.html