自建博客地址:bytelife.net,欢迎访问! 本文为博客自动同步文章,为了更好的阅读体验,建议您移步至我的博客👇
本文作者: Jeffrey
本文链接: bytelife.net/articles/47…
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
引言:XML(可扩展标记语言)在软件开发工程中取得了广泛的应用。在Java语言中操作XML有许多方法,最常用的方法就是使用JDom、Dom4j等第三方组件。本文将简单介绍使用Dom4j操作XML的基本方法。
本文采用的Dom4j版本为1.6.1,下载地址见文章结尾。 废话不多说,先来看一下本文使用的XML文件内容:
1 | xml复制代码<?xml version="1.0" encoding="UTF-8"?> |
在这个XML文件中,可以看到根节点为class,它有student和teacher子节点,而student子节点中又包含num、name、age、hobby等孙子辈节点,teacher子节点中包含name、age、course等孙子辈节点。 下面就使用dom4j来操作这个xml文件。
解析XML
当使用dom4j操作xml时,你想做的第一件事可能就是解析一个Xml文档,这个操作在dom4j中十分容易,使用下面的代码即可以轻松的解析xml文件并返回一个Document对象。
1 | java复制代码package cn.javacodes.dom4j; |
输出结果:
根节点:class,id=1
使用迭代器Iterator
一个Element对象可以通过几个方法来返回一个标准的Java迭代器: (1)迭代所有子元素
1 | java复制代码// 迭代root元素的所有子元素 |
输出结果:
student student teacher
(2)通过元素名称迭代
1 | java复制代码// 通过元素名称“student”迭代子元素 |
输出结果:
student student
(3)迭代所有属性
1 | java复制代码// 迭代root元素的所有属性 |
输出结果:
id:1
获取元素值
通常我们都需要获取xml元素标签内部的文本,也就是元素值,下面一个简单的例子递归显示所有的元素值:
1 | java复制代码public static void showAllElementText(Element e){ |
输出结果
num=0001 name=张三 age=19 num=0002 name=李四 age=21 name=足球 name=篮球 name=王老师 age=40 course=Java
使用XPath表达式
在Dom4j中使用XPath表达式可以更加轻松的操作XML文档,使用XPath表达式可以使用仅一行代码来进行复杂的操作,在Dom4j中使用XPath的几个简单示例代码如下: (1)查询单个节点(默认查找第一个):
1 | java复制代码// 获取SAX阅读器 |
(2)查询多个节点
1 | java复制代码// 获取所有student元素的name节点 |
以上为两种经常使用的方法,另外如果你想在一个XHTML文档中查找到所有的超文本链接,可以使用下面这个窍门轻松实现:
1 | java复制代码 public void findLinks(Document document) throws DocumentException { |
如果你需要任何有关学习XPah表达式语言的帮助,你可以访问Zvon tutorial进行学习,这里可以通过各种各样的例子帮助你学习。
快速循环
如果你需要操作一个十分庞大的XML文档,那么你应该使用快速循环的方法以避免在每次循环都创建Iterator对象,下面是一个简单的例子:
1 | java复制代码 public void treeWalk(Document document) { |
创建XML Document对象
在使用Dom4j时经常需要创建一个新的document,下面是一个简单的示例:
1 | java复制代码import org.dom4j.Document; |
写入XML文件
使用Dom4j将Document对象写入到XML文件十分简单,你只需要1行代码即可解决:
1 | java复制代码document.write( new FileWriter( "foo.xml" )); |
如果你想修改输出的格式,例如更易读的排版或者压缩(紧凑)的排版,再或者你想通过Writer或OutputStream进行输出,那么你可以使用XMLWriter类:
1 | java复制代码import org.dom4j.Document; |
Document对象与XML代码互转
如果你想通过一个Document对象或其他任何节点对象(例如Attribute或Element),你可以通过asXML()方法将它转换为XML文本字符串,例如:
1 | java复制代码 Document document = ...; |
如果你想从一个XML文本字符串转为一个Document对象,你可以使用DocumentHelper.parseText()方法进行解析:
1 | java复制代码 String text = "<person> <name>James</name> </person>"; |
XSLT
通过Sum公司提供的JAXP API在一个Document上应用XSLT十分简单。这里有一个使用JAXP创建一个transformer并应用到Document上的例子:
1 | java复制代码import javax.xml.transform.Transformer; |
本文转载自: 掘金