java基础75 xpth技术(网页知识)

1、xpth技术

1.1、xpath的作用

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

    list<Node> selectNodes("xpath");  查询多个节点对象
                     selectSingleNode("xpath");  查询一个节点对象

1.2、在dom4j中如何使用xpath技术

    1.导入xpath技术jar包:jaxen-1.1-beta-6.jar
    2.使用xpath的方法

2、xpath语法          XPath在线文档

         绝对路径    表示从xml的跟位置开始或者子元素(一个层次结构)
    //     相对路径    表示不分任何层次结构的选择元素.
        通配符    表示匹配所有元素
    [ ]    条件    表示选择什么条件下的元素
       属性    表示属性节点
    and  关系    表示条件与关系(等价于&&)
    text  文本    表示选择文本内容

3、实例

例1:

 1 package com.shore.xpath;
 2 
 3 import java.io.File;
 4 import java.io.FileOutputStream;
 5 
 6 import org.dom4j.Document;
 7 import org.dom4j.DocumentException;
 8 import org.dom4j.Element;
 9 import org.dom4j.io.OutputFormat;
10 import org.dom4j.io.SAXReader;
11 import org.dom4j.io.XMLWriter;
12 
13 public class Demo1 {
14     public static void main(String[] args) throws Exception {
15         /*
16          * 需求:删除id值为001的学生标签
17          * */
18         Document doc=new SAXReader().read(new File("./src/contact.xml"));
19         //查询id为2的学生标签
20         //使用xpath技术
21         Element stuEle=(Element)doc.selectSingleNode("//contact[@id='001']");
22         stuEle.detach();//删除
23         
24         //创建写出通道对象
25         FileOutputStream out=new FileOutputStream("F:/contact.xml");
26         OutputFormat format=OutputFormat.createPrettyPrint();//设置写xml出文件的格式
27         format.setEncoding("utf-8");
28         //写出xml文件到F盘下
29         XMLWriter write=new XMLWriter(out,format);
30         //写出
31         write.write(doc);
32         write.close();
33     }
34 }

 例2:

 1 package com.shore.xpath;
 2 
 3 import java.io.File;
 4 import java.util.List;
 5 
 6 import org.dom4j.Document;
 7 import org.dom4j.Node;
 8 import org.dom4j.io.SAXReader;
 9 
10 /*
11  * 学习xPath语法
12  * */
13 public class Demo2 {
14     public static void main(String[] args) throws Exception {
15         Document doc=new SAXReader().read(new File("./src/contact.xml"));
16         String xpath="";        
17         /*
18          * 1./ 绝对路径,从xml的跟位置开始或子元素开始(一个层次)
19          * */
20         xpath="/contactList";
21         xpath="/contactList/contact";
22         /*
23          * 2.// 相对定位,表示部分任何层次结构的选择元素
24          * */
25         xpath="//contact[1]/name";
26         xpath="//name";
27         /*
28          * 3.* 通配符,表示匹配所有元素
29          * */
30         xpath="/contactList/*";
31         xpath="/contactList//*";
32         /*
33          * 4.[] 条件,表示选择什么条件下的元素
34          * */
35         //带有id属性的contact标签
36         xpath="//contact[@id]";
37         xpath="//contact[2]";
38         xpath="//contact[last()]";        
39         /*
40          * @ 属性; and 表示条件与关系(等价于&&)  
41          * */
42         xpath="//@id";
43         xpath="//contact[not(@id)]";
44         xpath="//contact[@id='001' and @name='张三']";
45         /*
46          * text() 表示选择文本内容
47          * */
48         //选择name标签下的文本内容
49         xpath="//name//text()";
50         List<Node> list=doc.selectNodes(xpath);
51         for (Node node : list) {
52             System.out.println(node.getText());
53         }    
54     }
55 }

contact.xml文档(注:上面的两个实例都用到此文件)

 1 <contactList>
 2     <contact id="001" name="zhangsan">
 3         <name>张三</name>
 4         <age>18</age>
 5         <phone>15779593710</phone>
 6         <email>872855221@qq.com</email>
 7         <qq>872855221</qq>
 8         <abc>
 9             <a><b></b></a>
10         </abc>
11     </contact>
12     <contact name="zhangsan">
13         <name>张三</name>
14         <age>18</age>
15         <phone>15779593710</phone>
16         <email>872855221@qq.com</email>
17         <qq>872855221</qq>
18     </contact>
19     <contact id="002">
20         <name>李四</name>
21         <age>20</age>
22         <phone>1314580</phone>
23         <email>12580@qq.com</email>
24         <qq>832144529</qq>
25     </contact>
26 </contactList>

附录

 1 package com.shore.login;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.File;
 5 import java.io.IOException;
 6 import java.io.InputStreamReader;
 7 
 8 import org.dom4j.Document;
 9 import org.dom4j.Element;
10 import org.dom4j.io.SAXReader;
11 
12 //模拟登陆
13 public class Demo1 {
14     public static void main(String[] args) throws Exception {
15         //1获取用户输入的用户名密码
16         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
17         System.out.println("请输入用户名:");
18         String name=br.readLine();
19         
20         System.out.println("请输入密码:");
21         String password=br.readLine();
22         
23         //2.到数据库中查询是否有对应用户
24         //对应的用户:在user.xml文件中找到一个
25         Document doc=new SAXReader().read(new File("./src/user.xml"));
26         Element userElement=(Element)doc.selectSingleNode("//user[@name='"+name+"' and @password='"+password+"']");
27         
28         if(userElement !=null){
29             //登录成功
30             System.out.println("登录成功!");
31             
32         }else{
33             //登录失败
34             System.out.println("登录失败,账号或密码错误!");
35         }
36     }
37 }

user.xml(作用:该文件中 存在的账号和密码,并且一一对应,才能登陆成功)

1 <?xml version="1.0"  encoding="utf-8"?>
2 <users>
3     <user id="001" name="zhangsan" password="123456"></user>
4     <user id="002" name="wangwu" password="123456"></user>
5     <user id="003" name="lisi" password="123456"></user>
6 </users>

结果图

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/9579998.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

原文地址:https://www.cnblogs.com/dshore123/p/9579998.html