zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    }
  • 相关阅读:
    js中有哪些是循环遍历的方法?
    堆内存和栈内存
    Html5和Css3
    PyCharm IDE 的使用
    python基础语法
    数据挖掘书籍简介
    寄存器-2
    汇编基础
    Std::bind()
    手游页游和端游的服务端框架
  • 原文地址:https://www.cnblogs.com/JYDesigner/p/9463303.html
Copyright © 2011-2022 走看看