一: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的使用)的更多相关文章

  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. Spring4整合Hibernate4详细示例

    1. Spring整合Hibernate,主要是解决什么问题? a.让Spring提供的IOC容器来管理Hibernate的SessionFactory b.让Hibernate使用Spring提供的 ...

  2. Windows 下整理内存工具推荐——cleanmem

    ---恢复内容开始--- cleanmem 是个不错的内存整理工具,www.xdown.com 下载有便携版提供下载. 软件有pro版和free版,一般情况下,free版够用了,没必要用pro版. p ...

  3. BestCoder Round #71 (div.2) (hdu 5621)

    KK's Point Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  4. iis 启用父目录路径访问

    今天公司有个客户保修网站后台无法访问,我查看了源代码,发现ASP代码本身并没有什么问题.而且我下到本地能够访问.就是在网上不能正常连接,显示入下错误: Server.MapPath() 错误 'ASP ...

  5. Struts2常量的具体用法实例(一)

    XML代码: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC ...

  6. 奇妙华为3c手机, 出现安装未成功问题。

    1.我会命令adb uninstall 先卸载我们有签名的安装包. 2.用开发模式在手机上执行我们的应用. 3.然后測试就把手机拿走了,就用应用管理器把我们的应用卸载了. 4.继续装我们的开发包,死活 ...

  7. Swift常用语法示例代码(二)

    此篇文章整理自我以前学习Swift时的一些练习代码,其存在的意义多是可以通过看示例代码更快地回忆Swift的主要语法. 如果你想系统学习Swift或者是Swift的初学者请绕路,感谢Github上Th ...

  8. jq实现竞拍倒计时

    1jq的效果代码 //全局变量用于存储当前时间 var nows; function rightZeroStr(v) { ) { " + v; } return v + "&quo ...

  9. 实例源码--Android自定义Gallery动画效果

    相关文档与源码: 下载源码   技术要点: 1.自定义控件的使用 2.Gallery控件的使用实例 3.详细的源码注释 ...... 详细介绍: 1.自定义控件的使用 本套源码通过自定义控件的方式,继 ...

  10. 分布式文件系统之GPFS

    GPFS是IBM公司通过完善和发展其Tiger Shark文件系统发展而来.GPFS通过共享磁盘结构来实现其强大的扩展性.一个GPFS系统由许多集群节点组成,GPFS文件系统和应用程序在上面运行.这些 ...