• dom4j 的使用需要导入 jar 包, 包括: dom4j-1.6.1 和 jaxen-1.1-beta

    • 步骤: 在项目目录下,"Folder" 创建一个 lib 文件夹
    • 复制 jar 包到 lib 下面
    • 右键 "build path" , 然后 "add to buildpath"
// 示例:
// xml 文档
<?xml version="1.0" encoding="gbk"?>
<person>
<p1 id="102">
<name>zhangsan</name>
<age>20</age>
</p1>
<p1>
<name>wangcai</name>
<age>25</age>
</p1>
</person> // 需求一: 查询 xml 中所有 name 元素里面的值
/*
* 思路:
* 1. 创建解析器
* 2. 得到 document 对象
* 3. 得到根节点, getRootElement
* 4. 得到所有的 p1 标签
* element(qname); // 返回标签 qname 下面的第一个符合查找的子标签
* elements(qname); // 返回标签下面的属于 qname 的所有第一层子标签, 结果是 list 集合
* elements(); // 返回标签下面的所有一层子标签
*
* 5. 得到 name 元素
* 6. 获取 name 元素里面的值, getText()
*/ public static void main(String[] args){ // 1. 创建解析器, 需要导入 org.dom4j.io.SAXReader 包
SAXReader saxReader = new SAXReader(); // 2. 获取 document 对象, 需要导入 org.dom4j.Document 包
Document document = saxReader.read("src/person.xml"); // 3. 获取根节点
Element root = document.geteRootElement(); // 4. 获取所有的 p1
List<Element> list = root.elements("p1"); // 5. 遍历 list 集合
for(Element p : list){ // element 就是每一个 p1 元素
// 获取 p1 下面的第一个 name 元素
Element name1 = p.element("name");
// 得到 name 元素里面的值
String s = name1.getText();
}
} // 需求二: 在第一个 p1 标签中的末尾处添加 <sex>male</sex>
/*
* 思路:
* 1. 创建解析器
* 2. 得到 document 对象
* 3. 得到根节点, getRootElement
* 4. 得到第一个 p1 标签
* 5. 在 p1 下面直接添加 p1.addElement("标签名"); 返回 Element 对象
* 6. 在 sex 标签中添加文本, sex.setText("文本内容");
*
* 7. 回写 xml, org.dom4j.io 包
* XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("文件地址"), OutputFormat format);
* 关于第二个参数 OutputFormat format
* 第一种方式: OutputFormat.createPrettyPrint(); 带有缩进效果的输出
* 第二种方式: OutputFormat.createCompactFormat(); 不带格式的输出
* 第三种方式:
* OutputFormat format = new OutputFormat(String indent, boolean newlines);
* 第一个参数: 缩进方式, "\t" 或者 空格; 第二个参数: 是否换行.
* format.setTrimText(true); // 清空文档原有的换行和缩进
*/ public static void main(String[] args){ // 1. 创建解析器,
SAXReader saxReader = new SAXReader(); // 2. 获取 document 对象
Document document = saxReader.read("src/person.xml"); // 3. 获取根节点
Element root = document.getRootElement(); // 4. 获取第一个 p1 标签
Element p = root.element("p1"); // 5. 添加 sex 标签
Element sex2 = p.addElement("sex"); // 6. 添加文本
sex2.setText("male"); // 7. 回写 xml
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"), format);
xmlWriter.write(document);
xmlWriter.close(); // 关闭资源
} // 需求三: 在特定的位置添加元素, 例如在第一个 p1 下面的 age 标签之前添加 <school>University</school>
/*
* 思路:
* 1. 获取解析器
* 2. 得到 document 对象
* 3. 得到第一个 p1 标签
* 4. 获取 p1 标签下面的所有元素: elements(); 返回值类型: List 集合
* 使用 List 集合中的方法, add(int index, E element); 在指定位置添加元素
* 5. 添加元素之前,需要先创建元素
* Element school = DocumentHelper.creatElement("school");
* 6. 在元素中添加文本: school.setText("University");
* 7. 回写 xml
*/ // 升级版, 将获取 document 对象 和 回写 xml 的代码封装成方法
class Dom4jUtils{ // 获取 document 对象
public static Document getDocument(String path){ try{
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(path);
return document;
} catch (Exception e){
e.printStackTrace();
} return null;
} // 回写 xml 操作
public static void myXmlWriter(Document document, String path){
try{
OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(path); format); xmlWriter.write(document);
xmlWriter.close();
} catch (Exception e){
e.printStackTrace();
}
}
} // 需求四: 修改 (需要回写 xml)
// 将 p1 标签下面的 age 标签中的内容修改为 30 /*
* 思路: 使用 setText("30"); 方法
*/ // 需求五: 删除 (需要回写 xml)
// 将第一个 p1 标签下面的 school 标签删除 /*
* 思路:
* 1. 获取第一个 p1 标签
* root.element("p1");
* 2. 获取 p1 标签下面的 school 标签
* Element school2 = p1.element("school");
* 3. 使用父节点, 删除 school 标签
* p1.remove(school2);
*/ // 需求六: 获取属性值
// 获取第一个 p1 里面的属性 id 的值 /*
* 思路:
* p1.attributeValue("属性名"); // 返回值: 属性对应的值
*/

dom4j 解析器使用 XPath 语言操作 xml 文档

  • 导入支持 xpath 的 jar 包, jaxen-1.1-beta-6.jar
  • dom4j 里面提供了两个方法, 用来支持 XPath
    • selectNodes("XPath 表达式"); 表示获取多个节点
    • SelectSingleNode("Xpath 表达式"); 表示获取单个节点
// 示例:
// xml 文档
<?xml version="1.0" encodint="gbk"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>30</price>
</book> <book>
<title lang="cn">Learning XML</title>
<price>26</price>
</book>
</bookstore> // 需求一: 查询
// 查询 xml 文档中所有 title 元素的值 /*
* 思路:
* 1. 获取 document 对象
* 2. 直接使用 document.selectNodes("//title"); 返回 List<Node> 集合
*/ public static void main(String[] args){ Document document = Dom4jUtils.getDocument("src/bookstore.xml"); // 此处 Node 对象, 需要导入 org.dom4j.Node 包
List<Node> list = document.selectNodes("//title"); // 遍历 list 集合
for(Node node : list){ // 获取 title 元素里面的值
String s = node.getText();
System.out.println(s);
}
}

**参考资料:**
- [JavaWeb 视频教程](https://www.bilibili.com/video/av12750191/#page=6)
- [dom4j API 文档](http://tool.oschina.net/apidocs/apidoc?api=dom4j1.6.1%2Fapidocs)
- [dom4j jar包下载](https://dom4j.github.io/)
- [XPath jar包下载](http://mvnrepository.com/artifact/jaxen/jaxen/1.1-beta-6)
- [W3School XPath 教程](http://www.w3school.com.cn/xpath/xpath_syntax.asp)

XML 解析之 dom4j 解析器的更多相关文章

  1. XML技术之DOM4J解析器

    由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...

  2. XML文件解析之DOM4J解析

    1.DOM4J介绍 dom4j的官网是http://www.dom4j.org/dom4j-1.6.1/,最新的版本是1.6.1,根据官网介绍可知.dom4j是一个易用的.开源的库,应用于Java平台 ...

  3. DOM综合案例、SAX解析、StAX解析、DOM4J解析

    今日大纲 1.DOM技术对xml的增删操作 2.使用DOM技术完成联系人管理 3.SAX和StAX解析 4.DOM4J解析 5.XPATH介绍 1.DOM的增删操作 1.1.DOM的增加操作 /* * ...

  4. Java---XML的解析(2)-DOM4J解析/Xpath

    Dom4j: Dom SUN dom在加载时,将所有元素全部加载内存 DOM4j - 第三方. Dom4j是一个开源.灵活的XML API. 目前很多开源框架如struts,hibernate都使用d ...

  5. XML文件解析之DOM解析

    XML文件是一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.基本的解析方式包括DOM解析和SAX解析,具体来说包括DOM解析,SAX解析,DOM4J解 ...

  6. dom4j解析器sax解析xml文件

    1.使用dom4j解析器解析xml ***解析器dom4j是由dom4j组织提供的,针对xml进行解析.dom4j不是Javase的一部分,使用时需要导入dom4j的jar包(官网下载) 在eclip ...

  7. xml之dom4j解析

    * 使用dom4j解析xml 实例在java520里面 TextDom4j * dom4j,是一个组织,针对xml解析,提供解析器dom4j * dom4j不是javase的一部分,想要使用第一步需要 ...

  8. 使用dom4j解析XML文档

    dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...

  9. javaweb学习总结十三(dom4j方式对XML文档进行解析以及Xpath的使用)

    一:dom4j方式介绍 对于xml的解析总共有三种 1:jaxp方式,是sun公司开发的,分为sax方式和dom方式 2:jdom方式,后来其中部分人员参与开发dom4j 3:dom4j方式,是现在企 ...

随机推荐

  1. RS232接口

    想用下板子,却发现板子和USB转串口线都是母口,无耐只能自己用线将对应的管脚连起来. 结果测试的时候发现,板子能发不能收.将板子串口的23连起来,回环正常.电脑USB转串口线上的23连起来也回环正常. ...

  2. makefile之patsubst函数

    格式:$(patsubst pattern,replacement,text) 名称:模式字符串替换函数--patsubst. 功能:查找text中的单词(单词以"空格".&quo ...

  3. “互联网+”取代O2O将成为2016最大风口

    2016年的最大风口是“互联网+”,经历了O2O的洗礼,B2C服务的全线崛起.跨界与场景打造的极致体验,从0到1的产业开放,都将在这一年集体爆发,“互联网+”比O2O更加接地气,更具有完整的商业模式和 ...

  4. POJ 2472 106 miles to Chicago

    最短路问题变形. 题意是给你一些道路,和路过时不被抓的概率. 要求找一条到达目的地时不被抓的最大概率概率. 初始 dis[]设为 1 .其余为 0 .找最大就可以. #include<cstdi ...

  5. [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接https://www.cnblogs.com/kevingrace/p/5651447.html

      近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已, ...

  6. 关于selenium IDE找不到元素bug

    使用 selenium IDE 录制脚本,经常会发生 这样一种错误. 页面上,明明存在这个元素,就是找不到. 其实原理很简单   , 按钮 点击,没有时间延迟,但是页面加载,需要一段时间. 页面元素还 ...

  7. 获取openid

    请将文件MP_verify_IbWggk5i4gWgrast.txt上传至mp.weixin.qq.com指向的web服务器(或虚拟主机)的目录 怎么处理的?//将txt文件上传到你填的域名的根目录 ...

  8. select 自定义样式插件 selectize.js

    [特别推荐]几款极好的 JavaScript 下拉列表插件   表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让 ...

  9. FireBug与FirePHP

    a.FireBug,平时用的比较多.就是在客户端调试代码.如:hTML ,CSS,JS等 b.FireBug安装较容易. b-1,打开火狐浏览器 b-2,打开“附加组件” b-3.搜索“firebug ...

  10. 《linux系统及其编程》实验课记录(二)

    实验 2:获取对使用命令的帮助 实验环境: 安装了 Red Hat Enterprise Linux 6.0 可运行系统,并且是成功验证系统.有另外一个无特权用户 student,密码 student ...