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技术的更多相关文章

  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. centso7设置防火墙

    CentOS 7默认使用的是firewall作为防火墙,使用iptables必须重新设置一下 1.直接关闭防火墙 1 2 3 systemctl stop firewalld.service #停止f ...

  2. css怎样让元素显示指定的宽高比

    .father { width: 100% } .child {; padding-bottom: 20%; background: green; overflow: hidden; } <bo ...

  3. Python 基础之if if else

    1.代码块 以冒号作为开始,用缩进来划分区域,这个整体叫做代码块 if 5 == 5:   print(1)   print(2)   if True:   print(3)   print(4)   ...

  4. Python 基础之序列化模块pickle与json

    一:pickle 序列化模块把不能够直接存储的数据,变得可存储就是序列化把存储好的数据,转化成原本的数据类型,加做反序列化 php: 序列化和反序列化(1)serialize(2)unserializ ...

  5. Xcode Edit Schemes

    关于本文:有关“Xcode Edit Schemes”的设置,还是有很大的学问的.由于时间关系,我一点一点的补充. 1.在开发的时候,至少将Run的Build Configuration设置为Debu ...

  6. git提交代码报:fatal: Unable to create 'E:/testGit/test/.git/index.lock': File exists.

    git提交代码报错,提示:fatal: Unable to create 'E:/testGit/test/.git/index.lock': File exists. 具体截图如下: 在.git目录 ...

  7. 【JS 常用操作】

    正则表达式 <script> var str = "(08:30-10:00)"; var patt = /^[(][0-9]{2}:[0-9]{2}-[0-9]{2} ...

  8. prometheus 统计MySQL 自增主键的剩余可用百分比

    mysqld_exporter自带的这个功能,下面是我使用的启动参数: nohup ./mysqld_exporter --config.my-cnf="./my.cnf" --w ...

  9. ActivePerl 安装

    下载 https://www.activestate.com/products/activeperl/downloads/ 链接:https://pan.baidu.com/s/1IXPdYFd5bD ...

  10. 4K对齐

    4K对齐这个概念常常与固态硬盘联系起来.买了一块固态硬盘,装机过程中时有忽略4K对齐这个小细节,但是这个小细节往往十分重要,它影响硬盘的使用寿命和速度. 现在来了解一下4K对齐到底是个什么东西. 一. ...