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