一:dom4j方式介绍

对于xml的解析总共有三种

1:jaxp方式,是sun公司开发的,分为sax方式和dom方式

2:jdom方式,后来其中部分人员参与开发dom4j

3:dom4j方式,是现在企业使用比较多的一种方式

二:代码案例

1:读取xml文件中某个节点

1):获取第二个学生的名字

  1. @Test
  2. // 1:获取第二个学生的名字
  3. public void test01() throws DocumentException {
  4. // 1:获取解析器
  5. SAXReader reader = new SAXReader();
  6. // 2:获取doc文档
  7. Document doc = reader.read(new File("xml/exam.xml"));
  8. // 3:获取根元素
  9. Element root = doc.getRootElement();
  10. // 4:获取所有的学生节点
  11. List list = root.elements("student");
  12. Element student = (Element) list.get(1);
  13. String name = student.element("name").getText();
  14. System.out.println(name);
  15. }

2):获取第2个学生的属性名和值

  1. @Test
  2. // 2:获取第2个学生的属性名和值
  3. public void test02() throws DocumentException {
  4. // 1:获取解析器
  5. SAXReader reader = new SAXReader();
  6. // 2:获取doc文档
  7. Document doc = reader.read(new File("xml/exam.xml"));
  8. // 3:获取根元素
  9. Element root = doc.getRootElement();
  10. // 4:获取所有的学生节点
  11. List list = root.elements("student");
  12. Element student = (Element) list.get(1);
  13. // String value = student.element("name").attribute("sid").getValue();
  14. String value = student.element("name").attributeValue("sid");
  15. System.out.println("sid:" + value);
  16. }

2:向xml文档中添加节点

  1. @Test
  2. // 3:向第一个学生添加学分节点
  3. public void test03() throws DocumentException,
  4. IOException {
  5. // 1:获取解析器
  6. SAXReader reader = new SAXReader();
  7. // 2:获取doc文档
  8. Document doc = reader.read(new File("xml/exam.xml"));
  9. // 3:获取根元素
  10. Element root = doc.getRootElement();
  11. // 4:获取所有的学生节点
  12. Element student = root.element("student");
  13. student.addElement("score").setText("100");
  14.  
  15. // 5:将内存中的内容写入xml文件中
  16. XMLWriter writer = new XMLWriter(new FileOutputStream("xml/exam.xml"));
  17. writer.write(doc);
  18. writer.flush();
  19. writer.close();
  20. }

3:向指定位置添加节点

这里要遍历修改添加节点的父类得到list集合,然后将节点

添加到list集合的具体位置。

  1. @Test
  2. // 4:向指定位置添加节点(在第二个学生的年龄元素后面添加节点)
  3. public void test04() throws DocumentException, IOException {
  4. // 1:获取解析器
  5. SAXReader reader = new SAXReader();
  6. // 2:获取doc文档
  7. Document doc = reader.read(new File("xml/exam.xml"));
  8. // 3:获取根元素
  9. Element root = doc.getRootElement();
  10. // 4:获取第二个学生节点
  11. Element student = (Element) root.elements("student").get(1);
  12. List list = student.elements();
  13.  
  14. // 创建分数节点
  15. Element score = DocumentHelper.createElement("score");
  16. score.setText("100");
  17. // 将节点添加到学生节点
  18. list.add(2, score);
  19.  
  20. // 将内存document写入xml
  21. XMLWriter writer = new XMLWriter(new FileOutputStream("xml/exam.xml"));
  22. writer.write(doc);
  23. writer.close();
  24. }

4:删除节点

得到删除节点以及父节点,然后就可以操作了,比较简单

  1. @Test
  2. // 删除上一步添加的几点
  3. public void test05() throws DocumentException, IOException,
  4. FileNotFoundException {
  5. // 1:获取解析器
  6. SAXReader reader = new SAXReader();
  7. // 2:获取doc文档
  8. Document doc = reader.read(new File("xml/exam.xml"));
  9. // 3:获取根元素
  10. Element root = doc.getRootElement();
  11. // 4:获取第二个学生节点
  12. Element student = (Element) root.elements("student").get(1);
  13. Element score = student.element("score");
  14. student.remove(score);
  15.  
  16. // 将内存document写入xml
  17. XMLWriter writer = new XMLWriter(new FileOutputStream("xml/exam.xml"));
  18. writer.write(doc);
  19. writer.close();
  20. }

5:修改节点内容

  1. @Test
  2. // 修改第二个学生的性别
  3. public void test06() throws DocumentException, IOException {
  4. SAXReader reader = new SAXReader();
  5. Document doc = reader.read(new File("xml/exam.xml"));
  6.  
  7. Element root = doc.getRootElement();
  8. Element student = (Element) root.elements("student").get(1);
  9. Element stuGender = student.element("gender");
  10. stuGender.setText("男");
  11.  
  12. // 将内存document写入xml
  13. XMLWriter writer = new XMLWriter(new FileOutputStream("xml/exam.xml"));
  14. writer.write(doc);
  15. writer.close();
  16. }

6:修改节点属性值

  1. @Test
  2. // 修改节点的属性(修改第二个学生的sid属性为345)
  3. public void test07() throws DocumentException, IOException {
  4. SAXReader reader = new SAXReader();
  5. Document doc = reader.read(new File("xml/exam.xml"));
  6.  
  7. Element root = doc.getRootElement();
  8. Element student = (Element) root.elements("student").get(1);
  9. Attribute attr = student.attribute("sid");
  10. attr.setValue("345");
  11.  
  12. // 将内存document写入xml
  13. XMLWriter writer = new XMLWriter(new FileOutputStream("xml/exam.xml"));
  14. writer.write(doc);
  15. writer.close();
  16. }

 三:Xpath的用法

由于dom4j的解析总是先解析根节点,然后再获取子节点.....,如果xml文件很很多层,那么解析起来会很麻烦,

所有dom4j开发出来Xpath,有点类似正则表达式的感觉

用例:

谓语:

测试案例:

//student :获取所有的xml中所有的student元素

[@username='username'] : 获取username为username值的student元素

  1. @Test
  2. public void testXpath() throws DocumentException {
  3. // 模拟输入用户名和密码
  4. String username = "Tom";
  5. String password = "123";
  6.  
  7. SAXReader reader = new SAXReader();
  8. Document doc = reader.read("xml/exam.xml");
  9.  
  10. Node node = doc.selectSingleNode("//student[@username='" + username
  11. + "' and @password='" + password + "']");
  12. if (null != node) {
  13. System.out.println("登录成功!");
  14. } else {
  15. System.out.println("登录失败!");
  16. }
  17. }

javaweb学习总结十三(dom4j方式对XML文档进行解析以及Xpath的使用)的更多相关文章

  1. javaweb学习总结十二(JAXP对XML文档进行SAX解析)

    一:JAXP使用SAX方式解析XML文件 1:dom解析与sax解析异同点 2:sax解析特点 二:代码案例 1:xml文件 <?xml version="1.0" enco ...

  2. 【JAVA与DOM4J实现对XML文档的CRUD操作】

    一.简介 1.网上下载DOM4J 1.6.1压缩包,解压开之后,发现几个目录和一个jar文件,jar文件是必须的文件其它目录: docs目录:帮助文档的目录,单击index.html: Quick s ...

  3. 编写Java程序,使用 dom4j 创建一个 XML 文档,文档名为“city.xml”。注意该文档的格式和数据

    查看本章节 查看作业目录 需求说明: 使用 dom4j 创建一个 XML 文档,文档名为"city.xml".该文档的格式和数据如图所示 实现思路: 创建Java项目,添加dom4 ...

  4. XML学习笔记(四)-- 修饰XML文档的CSS

    标签(空格分隔): 学习笔记 XML为存储结构化数据提供了强大的方法,但是它没有提供关于数据如何显示地信息,(数据的结构与数据表示无关).可以使用CSS来控制XML文档中各元素的呈现方式. CSS语法 ...

  5. 使用dom4j技术对xml文档进行增删改练习(一)

    整个流程如下面代码所以,并对一些重要代码意义做出详细解释: import java.io.File; import java.io.FileOutputStream; import org.dom4j ...

  6. 使用DOM4J解析XML文档,以及使用XPath提取XML文档

    使用DOM4J解析XML文档 需要首先下载DOM4J工具包.这是个第三方工具包 在使用DOM4J解析的时候需要导入 DOM4J的JAR包 下载DOM4J工具包->在MyEclipse中新建lib ...

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

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

  8. QT XML文档的解析 QXmlStreamReader, DOM,SAX 三种解析方法 简单示例

    0. xml文档如下 <?xml version="1.0"?> <bookindex> <entry term="sidebearings ...

  9. DOM生成XML文档与解析XML文档(JUNIT测试)

    package cn.liuning.test; import java.io.File; import java.io.IOException; import javax.xml.parsers.D ...

随机推荐

  1. 自动化运维工具ansible-如何设置客户端多python版本问题

    问题:在使用ansible进行管理客户主机时,发现客户主机安装了多个版本的python,并且默认版本为3.0 shell>>cat list 192.168.2.9 shell>&g ...

  2. Linux下的vi编辑命令中查找·替换详解

    一.查找 查找命令 /pattern<Enter> :向下查找pattern匹配字符串 ?pattern<Enter>:向上查找pattern匹配字符串 使用了查找命令之后,使 ...

  3. C 语言中包含的标准头文件(24个)

    <assert.h><complex.h><ctype.h><errno.h><fenv.h><float.h><intt ...

  4. Oracle数据库文件恢复与备份思路

    怎样才能对Oracle数据库进行备份?如何才能对删除的数据再进行恢复?这是困扰着很多人的问题.大家都知道,任何数据库在长期使用过程中,都会存在一定的安全隐患.对于数据库管理员来说不能仅寄希望于计算机操 ...

  5. ArcGIS Add-in开发(一)--获取选定要素的属性值

    刚刚接触AE开发,记录一下自己的学习心得! 欢迎大家一起交流探讨! 最近做大赛,突然想到可以让项目更加直观的操作,就在项目中加了幅底图(底图很简单) 我想在arcmap中选中相应的要素后,在后台通过写 ...

  6. 又来折腾Linux

    硬盘坏了之后就没装过Linux了,因为弄了一个很老的台式机的80G并口硬盘,根本不够用的,一直懒得理. 前段时间实验室的老机子得报销了,但是里面的东西还可以拆下来,所以又拆下了两个硬盘,这样就有三个8 ...

  7. Swift学习笔记一

    最近计划把Swift语言系统学习一下,然后将MagViewer用这种新语言重构一次,并且优化一下,这里记录一下Swift的学习笔记. Swift和Objective-C相比,在语法和书写形式上做了很多 ...

  8. URAL 1776 C - Anniversary Firework DP

    C - Anniversary FireworkTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/c ...

  9. Codeforces Gym 100342J Problem J. Triatrip bitset 求三元环的数量

    Problem J. TriatripTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/att ...

  10. ROR 环境的 搭建

    1)安装RUBY:从 http://www.ruby-lang.org/en/ 下载 ruby182-15.exe,安装Ruby.ruby -v 看是否安装成功.2)安装RAILS框架 :gem in ...