javaweb学习总结十三(dom4j方式对XML文档进行解析以及Xpath的使用)
一:dom4j方式介绍
对于xml的解析总共有三种
1:jaxp方式,是sun公司开发的,分为sax方式和dom方式
2:jdom方式,后来其中部分人员参与开发dom4j
3:dom4j方式,是现在企业使用比较多的一种方式
二:代码案例
1:读取xml文件中某个节点
1):获取第二个学生的名字
- @Test
- // 1:获取第二个学生的名字
- public void test01() throws DocumentException {
- // 1:获取解析器
- SAXReader reader = new SAXReader();
- // 2:获取doc文档
- Document doc = reader.read(new File("xml/exam.xml"));
- // 3:获取根元素
- Element root = doc.getRootElement();
- // 4:获取所有的学生节点
- List list = root.elements("student");
- Element student = (Element) list.get(1);
- String name = student.element("name").getText();
- System.out.println(name);
- }
2):获取第2个学生的属性名和值
- @Test
- // 2:获取第2个学生的属性名和值
- public void test02() throws DocumentException {
- // 1:获取解析器
- SAXReader reader = new SAXReader();
- // 2:获取doc文档
- Document doc = reader.read(new File("xml/exam.xml"));
- // 3:获取根元素
- Element root = doc.getRootElement();
- // 4:获取所有的学生节点
- List list = root.elements("student");
- Element student = (Element) list.get(1);
- // String value = student.element("name").attribute("sid").getValue();
- String value = student.element("name").attributeValue("sid");
- System.out.println("sid:" + value);
- }
2:向xml文档中添加节点
- @Test
- // 3:向第一个学生添加学分节点
- public void test03() throws DocumentException,
- IOException {
- // 1:获取解析器
- SAXReader reader = new SAXReader();
- // 2:获取doc文档
- Document doc = reader.read(new File("xml/exam.xml"));
- // 3:获取根元素
- Element root = doc.getRootElement();
- // 4:获取所有的学生节点
- Element student = root.element("student");
- student.addElement("score").setText("100");
- // 5:将内存中的内容写入xml文件中
- XMLWriter writer = new XMLWriter(new FileOutputStream("xml/exam.xml"));
- writer.write(doc);
- writer.flush();
- writer.close();
- }
3:向指定位置添加节点
这里要遍历修改添加节点的父类得到list集合,然后将节点
添加到list集合的具体位置。
- @Test
- // 4:向指定位置添加节点(在第二个学生的年龄元素后面添加节点)
- public void test04() throws DocumentException, IOException {
- // 1:获取解析器
- SAXReader reader = new SAXReader();
- // 2:获取doc文档
- Document doc = reader.read(new File("xml/exam.xml"));
- // 3:获取根元素
- Element root = doc.getRootElement();
- // 4:获取第二个学生节点
- Element student = (Element) root.elements("student").get(1);
- List list = student.elements();
- // 创建分数节点
- Element score = DocumentHelper.createElement("score");
- score.setText("100");
- // 将节点添加到学生节点
- list.add(2, score);
- // 将内存document写入xml
- XMLWriter writer = new XMLWriter(new FileOutputStream("xml/exam.xml"));
- writer.write(doc);
- writer.close();
- }
4:删除节点
得到删除节点以及父节点,然后就可以操作了,比较简单
- @Test
- // 删除上一步添加的几点
- public void test05() throws DocumentException, IOException,
- FileNotFoundException {
- // 1:获取解析器
- SAXReader reader = new SAXReader();
- // 2:获取doc文档
- Document doc = reader.read(new File("xml/exam.xml"));
- // 3:获取根元素
- Element root = doc.getRootElement();
- // 4:获取第二个学生节点
- Element student = (Element) root.elements("student").get(1);
- Element score = student.element("score");
- student.remove(score);
- // 将内存document写入xml
- XMLWriter writer = new XMLWriter(new FileOutputStream("xml/exam.xml"));
- writer.write(doc);
- writer.close();
- }
5:修改节点内容
- @Test
- // 修改第二个学生的性别
- public void test06() throws DocumentException, IOException {
- SAXReader reader = new SAXReader();
- Document doc = reader.read(new File("xml/exam.xml"));
- Element root = doc.getRootElement();
- Element student = (Element) root.elements("student").get(1);
- Element stuGender = student.element("gender");
- stuGender.setText("男");
- // 将内存document写入xml
- XMLWriter writer = new XMLWriter(new FileOutputStream("xml/exam.xml"));
- writer.write(doc);
- writer.close();
- }
6:修改节点属性值
- @Test
- // 修改节点的属性(修改第二个学生的sid属性为345)
- public void test07() throws DocumentException, IOException {
- SAXReader reader = new SAXReader();
- Document doc = reader.read(new File("xml/exam.xml"));
- Element root = doc.getRootElement();
- Element student = (Element) root.elements("student").get(1);
- Attribute attr = student.attribute("sid");
- attr.setValue("345");
- // 将内存document写入xml
- XMLWriter writer = new XMLWriter(new FileOutputStream("xml/exam.xml"));
- writer.write(doc);
- writer.close();
- }
三:Xpath的用法
由于dom4j的解析总是先解析根节点,然后再获取子节点.....,如果xml文件很很多层,那么解析起来会很麻烦,
所有dom4j开发出来Xpath,有点类似正则表达式的感觉
用例:
谓语:
测试案例:
//student :获取所有的xml中所有的student元素
[@username='username'] : 获取username为username值的student元素
- @Test
- public void testXpath() throws DocumentException {
- // 模拟输入用户名和密码
- String username = "Tom";
- String password = "123";
- SAXReader reader = new SAXReader();
- Document doc = reader.read("xml/exam.xml");
- Node node = doc.selectSingleNode("//student[@username='" + username
- + "' and @password='" + password + "']");
- if (null != node) {
- System.out.println("登录成功!");
- } else {
- System.out.println("登录失败!");
- }
- }
javaweb学习总结十三(dom4j方式对XML文档进行解析以及Xpath的使用)的更多相关文章
- javaweb学习总结十二(JAXP对XML文档进行SAX解析)
一:JAXP使用SAX方式解析XML文件 1:dom解析与sax解析异同点 2:sax解析特点 二:代码案例 1:xml文件 <?xml version="1.0" enco ...
- 【JAVA与DOM4J实现对XML文档的CRUD操作】
一.简介 1.网上下载DOM4J 1.6.1压缩包,解压开之后,发现几个目录和一个jar文件,jar文件是必须的文件其它目录: docs目录:帮助文档的目录,单击index.html: Quick s ...
- 编写Java程序,使用 dom4j 创建一个 XML 文档,文档名为“city.xml”。注意该文档的格式和数据
查看本章节 查看作业目录 需求说明: 使用 dom4j 创建一个 XML 文档,文档名为"city.xml".该文档的格式和数据如图所示 实现思路: 创建Java项目,添加dom4 ...
- XML学习笔记(四)-- 修饰XML文档的CSS
标签(空格分隔): 学习笔记 XML为存储结构化数据提供了强大的方法,但是它没有提供关于数据如何显示地信息,(数据的结构与数据表示无关).可以使用CSS来控制XML文档中各元素的呈现方式. CSS语法 ...
- 使用dom4j技术对xml文档进行增删改练习(一)
整个流程如下面代码所以,并对一些重要代码意义做出详细解释: import java.io.File; import java.io.FileOutputStream; import org.dom4j ...
- 使用DOM4J解析XML文档,以及使用XPath提取XML文档
使用DOM4J解析XML文档 需要首先下载DOM4J工具包.这是个第三方工具包 在使用DOM4J解析的时候需要导入 DOM4J的JAR包 下载DOM4J工具包->在MyEclipse中新建lib ...
- Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术
一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...
- QT XML文档的解析 QXmlStreamReader, DOM,SAX 三种解析方法 简单示例
0. xml文档如下 <?xml version="1.0"?> <bookindex> <entry term="sidebearings ...
- DOM生成XML文档与解析XML文档(JUNIT测试)
package cn.liuning.test; import java.io.File; import java.io.IOException; import javax.xml.parsers.D ...
随机推荐
- 自动化运维工具ansible-如何设置客户端多python版本问题
问题:在使用ansible进行管理客户主机时,发现客户主机安装了多个版本的python,并且默认版本为3.0 shell>>cat list 192.168.2.9 shell>&g ...
- Linux下的vi编辑命令中查找·替换详解
一.查找 查找命令 /pattern<Enter> :向下查找pattern匹配字符串 ?pattern<Enter>:向上查找pattern匹配字符串 使用了查找命令之后,使 ...
- C 语言中包含的标准头文件(24个)
<assert.h><complex.h><ctype.h><errno.h><fenv.h><float.h><intt ...
- Oracle数据库文件恢复与备份思路
怎样才能对Oracle数据库进行备份?如何才能对删除的数据再进行恢复?这是困扰着很多人的问题.大家都知道,任何数据库在长期使用过程中,都会存在一定的安全隐患.对于数据库管理员来说不能仅寄希望于计算机操 ...
- ArcGIS Add-in开发(一)--获取选定要素的属性值
刚刚接触AE开发,记录一下自己的学习心得! 欢迎大家一起交流探讨! 最近做大赛,突然想到可以让项目更加直观的操作,就在项目中加了幅底图(底图很简单) 我想在arcmap中选中相应的要素后,在后台通过写 ...
- 又来折腾Linux
硬盘坏了之后就没装过Linux了,因为弄了一个很老的台式机的80G并口硬盘,根本不够用的,一直懒得理. 前段时间实验室的老机子得报销了,但是里面的东西还可以拆下来,所以又拆下了两个硬盘,这样就有三个8 ...
- Swift学习笔记一
最近计划把Swift语言系统学习一下,然后将MagViewer用这种新语言重构一次,并且优化一下,这里记录一下Swift的学习笔记. Swift和Objective-C相比,在语法和书写形式上做了很多 ...
- URAL 1776 C - Anniversary Firework DP
C - Anniversary FireworkTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/c ...
- Codeforces Gym 100342J Problem J. Triatrip bitset 求三元环的数量
Problem J. TriatripTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/att ...
- ROR 环境的 搭建
1)安装RUBY:从 http://www.ruby-lang.org/en/ 下载 ruby182-15.exe,安装Ruby.ruby -v 看是否安装成功.2)安装RAILS框架 :gem in ...