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+"\t姓名:"+name+"\t性别:"+gender+"\t年龄:"+age+"\t地址:"+address+"\t电话:"+phone);
- }
- }
- }
Day 27:Xpath技术的更多相关文章
- dom4j解析器 基于dom4j的xpath技术 简单工厂设计模式 分层结构设计思想 SAX解析器 DOM编程
*1 dom4j解析器 1)CRUD的含义:CreateReadUpdateDelete增删查改 2)XML解析器有二类,分别是DOM和SAX(simple Api for xml). ...
- xPath技术
在dom4j中如何使用xPath技术 1)导入xPath支持jar包 . jaxen-1.1-beta-6.jar 2)使用xpath方法 List<Node> selectNodes(& ...
- PHP 自学之路-----XML编程(Xpath技术,simpleXml技术)基础入门
XPAth技术 XPath的设计的核心思想,可以通过xpath迅速简介的定位到你希望查找的节点.主要目的是描述节点相对其他节点的位置,可以取得所有符合条件的节点,成为[位置路径]. Xapth主要用来 ...
- xpath技术解析xml以及案例模拟用户登录效果
问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!! xpath就在此情况下产生了--主要是用于快速获取所需的[节点对象]. 在dom4j中如何使用xPath技术 1) ...
- Java xml 操作(Dom4J修改xml + xPath技术 + SAX解析 + XML约束)
1 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大 ...
- xpath技术解析xm文件(php)
1.结合php dom技术的学习,得出一个结论:php dom技术可以跨层取出节点,但是不能保持层次关系,使用xpath可以很好地解决问题. *** xpath技术的核心思想:迅速简洁的定位你需要查找 ...
- xpath技术,用在dom4j中
title: xPath语法应用 tags: xPath,dom4j grammar_cjkRuby: true --- 在dom4j中,会使用到xPath技术. 在项目中导入 jaxen-1.1-b ...
- Java修炼——XPATH 技术_快速获取节点
准备资源 1) DOM4J 的 jar 包 2) Jaxen 的 jar 包 3) XPATH中文文档 XPATH技术是为了将获取结点变得更简单,更方便而设计的.是在DOM4J的基础上完成的.因此需要 ...
- Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术
一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...
随机推荐
- Python之json库
JSON简介 JSON (JavaScript Object Notation) 是一种用于表示结构化数据的流行数据格式. 常用于服务器和Web应用程序之间传输和接收数据. 在Python中,JSON ...
- C++面试常见问题——04链表的逆序与合并
链表的逆序与合并 链表的逆序 已知一个链表的头指针为head,将该链表逆序. #include<iostream> using namespace std; struct Node{ in ...
- YUV颜色编码格式
YUV 颜色编码采用的是 明亮度 和 色度 来指定像素的颜色,而色度又定义了颜色的两个方面:色调和饱和度. 其中: Y 表示明亮度(Luminance.Luma) U 和 V 表示色度(Chromin ...
- pip3与pyttsx3文字语音转换
今天想做个语音读取的小脚本,在网上查了一下发现python里有个pyttsx可以识别文字, 打算通过pip3 install pyttsx安装包,结果报错, 然后试了一下发现不行,去网上查了一下发现p ...
- 解决Python2中文ascii编码的方法
在YiiChina签到的时候,经常会看到有人在说说里面发群主是最帅的,yii 是 PHP 最好的框架,没有之一,就想到使用一言,在每天签到的时候也发一句话 同时使用方糖将内容推送到微信,防止有什么不对 ...
- ODT珂朵莉树
关于ODT,据说是毒瘤lxl发明的,然后毒瘤鱼鱼因为我用ODT误导人D了我一回-- 这是一种基于 \(set\) 的暴力数据结构. 在使用时请注意,没看见这2东西千万别用-- 1.保证数据随机 2.有 ...
- 远程服务器使用tensorboard
1 .由于服务器上tensorboard使用的端口是6006,因此,连接ssh时,将服务器的6006端口重定向到自己机器上的16006端口: ssh -L 16006:127.0.0.1:6006 u ...
- httpclient访问接口步骤
1. 创建HttpClient对象. 2. 构造Http 请求对象. 3. 执行HttpClient对象的execute方法,将Http请求对象作为该方法的参数. 4. 读取execute方法返回的H ...
- AJAX的兼容处理方式
AJAX在网站服务中使用到频率很高,也需要考虑各个浏览器版本的兼容性,本示例中详细介绍简单快捷的处理兼容性问题. <!DOCTYPE HTML> <html> <head ...
- [Codeforces #615 div3]1294E Obtain a Permutation
Before the Beginniing 本文为 Clouder 原创文章,原文链接为Click,转载时请将本段放在文章开头显眼处.如进行了二次创作,请明确标明. 由本人转载于博客园. 题意分析 C ...