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   用来存储用户的数据

  1. import java.io.File;
  2. import java.io.FileOutputStream;
  3. import org.dom4j.Document;
  4. import org.dom4j.Element;
  5. import org.dom4j.io.OutputFormat;
  6. import org.dom4j.io.SAXReader;
  7. import org.dom4j.io.XMLWriter;
  8.  
  9. public class Demo2 {
  10.  
  11. public static void main(String[] args) throws Exception{
  12. // 需求: 删除id值为2的学生标签
  13. Document doc = new SAXReader().read(new File("F:/a.xml"));
  14. //1.查询id为2的学生标签
  15. //使用xpath技术
  16. Element stuElem = (Element)doc.selectSingleNode("//Student[@id='2']");
  17. //2.删除标签
  18. stuElem.detach();
  19. //3.写出xml文件
  20. FileOutputStream out = new FileOutputStream("e:/student.xml");
  21. OutputFormat format = OutputFormat.createPrettyPrint();
  22. format.setEncoding("utf-8");
  23. XMLWriter writer = new XMLWriter(out,format);
  24. writer.write(doc);
  25. writer.close();
  26. }
  27.  
  28. }
  1. import java.io.File;
  2. import java.util.List;
  3. import org.dom4j.Document;
  4. import org.dom4j.Node;
  5. import org.dom4j.io.SAXReader;
  6.  
  7. public class Demo3 {
  8.  
  9. public static void main(String[] args) throws Exception {
  10. Document doc = new SAXReader().read(new File("./src/contact.xml"));
  11.  
  12. String xpath = "";
  13. /**
  14. * 1.绝对路径, 表示从xml的根位置开始或子元素(一个层次结构)
  15. */
  16. xpath = "/contactList";
  17. xpath = "/contactList/contact";
  18. /**
  19. * 2.相对路径, 表示不分任何层次结构的选择元素。
  20. */
  21. xpath = "//contact/name";
  22. xpath = "//name";
  23. /**
  24. * 3. 通配符,表示匹配所有元素
  25. */
  26. xpath = "/contactList/*";
  27. xpath = "/contactList//*";
  28. /**
  29. * 4.条件,表示选择什么条件下的元素
  30. */
  31. //带有id属性的contact标签
  32. xpath = "//contact[@id]";
  33. //第二个的contact标签
  34. xpath = "//contact[2]";
  35. //选择最后一个contact标签
  36. xpath = "//contact[last()]";
  37. /**
  38. * 5.属性,表示选择属性节点
  39. */
  40. xpath = "//@id";
  41. xpath = "//contact[not(@id)]";
  42. xpath = "//contact[@id='002']";
  43. xpath = "//contact[@id='001' and @name='eric']";
  44. /**
  45. *6.表示选择文本内容
  46. */
  47. //选择name标签下的文本内容,返回Text对象
  48. xpath = "//name/text()";
  49. xpath = "//contact/name[text()='李杰']";
  50. List<Node> list = doc.selectNodes(xpath);
  51. for (Node node : list) {
  52. System.out.println(node);
  53. }
  54. }
  55. }

//模拟登陆

  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.InputStreamReader;
  4. import org.dom4j.Document;
  5. import org.dom4j.Element;
  6. import org.dom4j.io.SAXReader;
  7.  
  8. public class Demo4 {
  9.  
  10. public static void main(String[] args)throws Exception{
  11. //1.获取用户输入的用户名和密码
  12. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  13. System.out.println("请输入用户名:");
  14. String name = br.readLine();
  15. System.out.println("请输入密码:");
  16. String password = br.readLine();
  17. //2.到“数据库”中查询是否有对应的用户
  18. Document doc = new SAXReader().read(new File("./src/user.xml"));
  19. Element userElem = (Element)doc.selectSingleNode("//user[@name='" +name +"' and @password='"+password+"']");
  20.  
  21. if(userElem!=null){
  22. System.out.println("登录成功");
  23. }else{
  24. System.out.println("登录失败");
  25. }
  26. }
  27. }
  1. import java.io.File;
  2. import java.util.Iterator;
  3. import java.util.List;
  4. import org.dom4j.Document;
  5. import org.dom4j.Element;
  6. import org.dom4j.io.SAXReader;
  7.  
  8. public class Demo5 {
  9.  
  10. public static void main(String[] args) throws Exception{
  11. Document doc = new SAXReader().read(new File("./src/personList.html"));
  12. //读取title标签
  13. Element titleElem = (Element)doc.selectSingleNode("//title");
  14. String title = titleElem.getText();
  15. System.out.println(title);
  16. //1.读取出所有tbody中的tr标签
  17. List<Element> list = (List<Element>)doc.selectNodes("//tbody/tr");
  18. //2.遍历
  19. for (Element elem : list) {
  20. String id = elem.selectSingleNode("td[1]").getText();
  21. String name = ((Element)elem.elements().get(1)).getText();
  22. String gender = ((Element)elem.elements().get(2)).getText();
  23. String age = ((Element)elem.elements().get(3)).getText();
  24. String address = ((Element)elem.elements().get(4)).getText();
  25. String phone = ((Element)elem.elements().get(5)).getText();
  26. System.out.println("编号:"+id+"\t姓名:"+name+"\t性别:"+gender+"\t年龄:"+age+"\t地址:"+address+"\t电话:"+phone);
  27. }
  28. }
  29. }

Day 27:Xpath技术的更多相关文章

  1. dom4j解析器 基于dom4j的xpath技术 简单工厂设计模式 分层结构设计思想 SAX解析器 DOM编程

    *1 dom4j解析器   1)CRUD的含义:CreateReadUpdateDelete增删查改   2)XML解析器有二类,分别是DOM和SAX(simple Api for xml).     ...

  2. xPath技术

    在dom4j中如何使用xPath技术 1)导入xPath支持jar包 . jaxen-1.1-beta-6.jar 2)使用xpath方法 List<Node> selectNodes(& ...

  3. PHP 自学之路-----XML编程(Xpath技术,simpleXml技术)基础入门

    XPAth技术 XPath的设计的核心思想,可以通过xpath迅速简介的定位到你希望查找的节点.主要目的是描述节点相对其他节点的位置,可以取得所有符合条件的节点,成为[位置路径]. Xapth主要用来 ...

  4. xpath技术解析xml以及案例模拟用户登录效果

    问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!! xpath就在此情况下产生了--主要是用于快速获取所需的[节点对象]. 在dom4j中如何使用xPath技术 1) ...

  5. Java xml 操作(Dom4J修改xml   + xPath技术  + SAX解析 + XML约束)

    1 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大 ...

  6. xpath技术解析xm文件(php)

    1.结合php dom技术的学习,得出一个结论:php dom技术可以跨层取出节点,但是不能保持层次关系,使用xpath可以很好地解决问题. *** xpath技术的核心思想:迅速简洁的定位你需要查找 ...

  7. xpath技术,用在dom4j中

    title: xPath语法应用 tags: xPath,dom4j grammar_cjkRuby: true --- 在dom4j中,会使用到xPath技术. 在项目中导入 jaxen-1.1-b ...

  8. Java修炼——XPATH 技术_快速获取节点

    准备资源 1) DOM4J 的 jar 包 2) Jaxen 的 jar 包 3) XPATH中文文档 XPATH技术是为了将获取结点变得更简单,更方便而设计的.是在DOM4J的基础上完成的.因此需要 ...

  9. Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术

    一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...

随机推荐

  1. Python之json库

    JSON简介 JSON (JavaScript Object Notation) 是一种用于表示结构化数据的流行数据格式. 常用于服务器和Web应用程序之间传输和接收数据. 在Python中,JSON ...

  2. C++面试常见问题——04链表的逆序与合并

    链表的逆序与合并 链表的逆序 已知一个链表的头指针为head,将该链表逆序. #include<iostream> using namespace std; struct Node{ in ...

  3. YUV颜色编码格式

    YUV 颜色编码采用的是 明亮度 和 色度 来指定像素的颜色,而色度又定义了颜色的两个方面:色调和饱和度. 其中: Y 表示明亮度(Luminance.Luma) U 和 V 表示色度(Chromin ...

  4. pip3与pyttsx3文字语音转换

    今天想做个语音读取的小脚本,在网上查了一下发现python里有个pyttsx可以识别文字, 打算通过pip3 install pyttsx安装包,结果报错, 然后试了一下发现不行,去网上查了一下发现p ...

  5. 解决Python2中文ascii编码的方法

    在YiiChina签到的时候,经常会看到有人在说说里面发群主是最帅的,yii 是 PHP 最好的框架,没有之一,就想到使用一言,在每天签到的时候也发一句话 同时使用方糖将内容推送到微信,防止有什么不对 ...

  6. ODT珂朵莉树

    关于ODT,据说是毒瘤lxl发明的,然后毒瘤鱼鱼因为我用ODT误导人D了我一回-- 这是一种基于 \(set\) 的暴力数据结构. 在使用时请注意,没看见这2东西千万别用-- 1.保证数据随机 2.有 ...

  7. 远程服务器使用tensorboard

    1 .由于服务器上tensorboard使用的端口是6006,因此,连接ssh时,将服务器的6006端口重定向到自己机器上的16006端口: ssh -L 16006:127.0.0.1:6006 u ...

  8. httpclient访问接口步骤

    1. 创建HttpClient对象. 2. 构造Http 请求对象. 3. 执行HttpClient对象的execute方法,将Http请求对象作为该方法的参数. 4. 读取execute方法返回的H ...

  9. AJAX的兼容处理方式

    AJAX在网站服务中使用到频率很高,也需要考虑各个浏览器版本的兼容性,本示例中详细介绍简单快捷的处理兼容性问题. <!DOCTYPE HTML> <html> <head ...

  10. [Codeforces #615 div3]1294E Obtain a Permutation

    Before the Beginniing 本文为 Clouder 原创文章,原文链接为Click,转载时请将本段放在文章开头显眼处.如进行了二次创作,请明确标明. 由本人转载于博客园. 题意分析 C ...