解析XML的方式有很多,本文介绍使用dom4j解析xml。
1、环境准备
(1)下载dom4j-1.6.1.jar
(2)下载junit-4.10.jar
2、温馨提示
解析XML过程是通过获取Document对象,然后继续获取各个节点以及属性等操作,因此获取Document对象是第一步,大体说来,有三种方式:
(1)自己创建Document对象
- Document document = DocumentHelper.createDocument();
- Element root = document.addElement("students");
其中students是根节点,可以继续添加其他节点等操作。
(2)读取XML文件获取Document对象
- //创建SAXReader对象
- SAXReader reader = new SAXReader();
- //读取文件 转换成Document
- Document document = reader.read(new File("XXXX.xml"));
(3)读取XML文本内容获取Document对象
- String xmlStr = "<students>......</students>";
- Document document = DocumentHelper.parseText(xmlStr);
3、示例
(1)xml文件内容如下
- <?xml version="1.0" encoding="UTF-8"?>
- <students>
- <student1 id="001">
- <微信公众号>@残缺的孤独</微信公众号>
- <学号>20140101</学号>
- <地址>北京海淀区</地址>
- <座右铭>要么强大,要么听话</座右铭>
- </student1>
- <student2 id="002">
- <新浪微博>@残缺的孤独</新浪微博>
- <学号>20140102</学号>
- <地址>北京朝阳区</地址>
- <座右铭>在哭泣中学会坚强</座右铭>
- </student2>
- </students>
(2)解析过程
- package cn.com.yy.dom4j;
- import java.io.File;
- import java.util.Iterator;
- import java.util.List;
- import org.dom4j.Attribute;
- import org.dom4j.Document;
- import org.dom4j.Element;
- import org.dom4j.io.SAXReader;
- import org.junit.Test;
- public class Dom4JforXML {
- @Test
- public void test() throws Exception{
- //创建SAXReader对象
- SAXReader reader = new SAXReader();
- //读取文件 转换成Document
- Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));
- //获取根节点元素对象
- Element root = document.getRootElement();
- //遍历
- listNodes(root);
- }
- //遍历当前节点下的所有节点
- public void listNodes(Element node){
- System.out.println("当前节点的名称:" + node.getName());
- //首先获取当前节点的所有属性节点
- List<Attribute> list = node.attributes();
- //遍历属性节点
- for(Attribute attribute : list){
- System.out.println("属性"+attribute.getName() +":" + attribute.getValue());
- }
- //如果当前节点内容不为空,则输出
- if(!(node.getTextTrim().equals(""))){
- System.out.println( node.getName() + ":" + node.getText());
- }
- //同时迭代当前节点下面的所有子节点
- //使用递归
- Iterator<Element> iterator = node.elementIterator();
- while(iterator.hasNext()){
- Element e = iterator.next();
- listNodes(e);
- }
- }
- }
(3)解析结果
- 当前节点的名称:students
- 当前节点的名称:student1
- 属性id:001
- 当前节点的名称:微信公众号
- 微信公众号:@残缺的孤独
- 当前节点的名称:学号
- 学号:20140101
- 当前节点的名称:地址
- 地址:北京海淀区
- 当前节点的名称:座右铭
- 座右铭:要么强大,要么听话
- 当前节点的名称:student2
- 属性id:002
- 当前节点的名称:新浪微博
- 新浪微博:@残缺的孤独
- 当前节点的名称:学号
- 学号:20140102
- 当前节点的名称:地址
- 地址:北京朝阳区
- 当前节点的名称:座右铭
- 座右铭:在哭泣中学会坚强
4、dom4j操作节点属性
使用dom4j可以操作节点属性,比如添加节点属性、删除节点属性、修改属性值等操作。下面使用dom4j为上述的student1节点删除id属性,新添name属性。
(1)代码示例
- @Test
- public void test2()throws Exception{
- //创建SAXReader对象
- SAXReader reader = new SAXReader();
- //读取文件 转换成Document
- Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));
- //获取根节点元素对象
- Element root = document.getRootElement();
- System.out.println("-------添加属性前------");
- //获取节点student1
- Element student1Element = root.element("student1");
- //遍历
- listNodes(student1Element);
- //获取其属性
- Attribute idAttribute = student1Element.attribute("id");
- //删除其属性
- student1Element.remove(idAttribute);
- //为其添加新属性
- student1Element.addAttribute("name", "这是student1节点的新属性");
- System.out.println("-------添加属性后------");
- listNodes(student1Element);
- }
(2)结果
- -------添加属性前------
- 当前节点的名称:student1
- <span style="background-color: rgb(255, 0, 0);">属性id:001</span>
- 当前节点的名称:微信公众号
- 微信公众号:@残缺的孤独
- 当前节点的名称:学号
- 学号:20140101
- 当前节点的名称:地址
- 地址:北京海淀区
- 当前节点的名称:座右铭
- 座右铭:要么强大,要么听话
- -------添加属性后------
- 当前节点的名称:student1
- <span style="background-color: rgb(255, 255, 255);"><span style="color:#ff0000;">属性name:这是student1节点的新属性
- </span></span>当前节点的名称:微信公众号
- 微信公众号:@残缺的孤独
- 当前节点的名称:学号
- 学号:20140101
- 当前节点的名称:地址
- 地址:北京海淀区
- 当前节点的名称:座右铭
- 座右铭:要么强大,要么听话
5、dom4j新增节点
使用dom4j可以删除指定节点、新增节点等操作,我们使用dom4j为student1节点新增phone节点,如下。
(1)代码
- //添加节点
- @Test
- public void test3()throws Exception{
- //创建SAXReader对象
- SAXReader reader = new SAXReader();
- //读取文件 转换成Document
- Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));
- //获取根节点元素对象
- Element root = document.getRootElement();
- System.out.println("-------添加节点前------");
- //获取节点student1
- Element student1Element = root.element("student1");
- //遍历
- listNodes(student1Element);
- //添加phone节点
- Element phoneElement = student1Element.addElement("phone");
- //为phone节点设置值
- phoneElement.setText("137xxxxxxxx");
- System.out.println("-------添加节点后------");
- listNodes(student1Element);
- }
(2)结果
- -------添加节点前------
- 当前节点的名称:student1
- 属性id:001
- 当前节点的名称:微信公众号
- 微信公众号:@残缺的孤独
- 当前节点的名称:学号
- 学号:20140101
- 当前节点的名称:地址
- 地址:北京海淀区
- 当前节点的名称:座右铭
- 座右铭:要么强大,要么听话
- -------添加节点后------
- 当前节点的名称:student1
- 属性id:001
- 当前节点的名称:微信公众号
- 微信公众号:@残缺的孤独
- 当前节点的名称:学号
- 学号:20140101
- 当前节点的名称:地址
- 地址:北京海淀区
- 当前节点的名称:座右铭
- 座右铭:要么强大,要么听话
- 当前节点的名称:phone
- <span style="color:#ff0000;">phone:137xxxxxxxx</span>
6、把Document对象写入新的文件
有时,我们需要把document对象写入新的文件,dom4j提供了对应的API以便我们进行操作。我们在完成第 5 后,把document写入新的文件s1.xml,如下。
(1)代码
- //添加节点后,写入新的文件
- @Test
- public void test4()throws Exception{
- //创建SAXReader对象
- SAXReader reader = new SAXReader();
- //读取文件 转换成Document
- Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));
- //获取根节点元素对象
- Element root = document.getRootElement();
- System.out.println("-------添加节点前------");
- //获取节点student1
- Element student1Element = root.element("student1");
- //遍历
- listNodes(student1Element);
- //添加phone节点
- Element phoneElement = student1Element.addElement("phone");
- //为phone节点设置值
- phoneElement.setText("137xxxxxxxx");
- System.out.println("-------添加节点后------");
- listNodes(student1Element);
- //把student1Element写入新文件
- writerDocumentToNewFile(document);
- System.out.println("---写入完毕----");
- }
- //document写入新的文件
- public void writerDocumentToNewFile(Document document)throws Exception{
- //输出格式
- OutputFormat format = OutputFormat.createPrettyPrint();
- //设置编码
- format.setEncoding("UTF-8");
- //XMLWriter 指定输出文件以及格式
- XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File("src/cn/com/yy/dom4j/s1.xml")),"UTF-8"), format);
- //写入新文件
- writer.write(document);
- writer.flush();
- writer.close();
- }
(2)查看s1.xml文件
- <?xml version="1.0" encoding="UTF-8"?>
- <students>
- <student1 id="001">
- <微信公众号>@残缺的孤独</微信公众号>
- <学号>20140101</学号>
- <地址>北京海淀区</地址>
- <座右铭>要么强大,要么听话</座右铭>
- <phone>137xxxxxxxx</phone>
- </student1>
- <student2 id="002">
- <新浪微博>@残缺的孤独</新浪微博>
- <学号>20140102</学号>
- <地址>北京朝阳区</地址>
- <座右铭>在哭泣中学会坚强</座右铭>
- </student2>
- </students>
因为涉及到中文,所以在输出时要设定UTF8编码,OutputStreamWriter进行设置编码。
还有输出格式的问题,在此处使用的是OutputFormat.createPrettyPrint(),输出文档时进行了排版格式化。还有一种是OutputFormat.createCompactFormat()方法,输出内容是一行,没有进行格式化,是紧凑型的输出。如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <students><student1 id="001"><微信公众号>@残缺的孤独</微信公众号><学号>20140101</学号><地址>北京海淀区</地址><座右铭>要么强大,要么听话</座右铭><phone>137xxxxxxxx</phone></student1><student2 id="002"><新浪微博>@残缺的孤独</新浪微博><学号>20140102</学号><地址>北京朝阳区</地址><座右铭>在哭泣中学会坚强</座右铭></student2></students>
http://blog.csdn.net/yyywyr/article/details/38359049
相关推荐
Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...
Java DOM4J解析XML是一种常见的处理XML文档的技术,它提供了灵活且高效的API,使得开发者能够方便地读取、写入、修改以及操作XML文件。DOM4J是Java中一个非常强大的XML处理库,它结合了DOM、SAX和JDOM的优点,同时也...
### DOM4J解析XML详解 #### 一、DOM4J简介与特性 DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时...
2. **基本用法**:在Java程序中,首先需要导入dom4j库,然后使用`DocumentBuilderFactory`创建`DocumentBuilder`,接着使用`DocumentBuilder`解析XML文件,得到`Document`对象。你可以通过`Document`对象获取XML的根...
5. **事件驱动解析(SAX)**:除了传统的DOM解析外,DOM4J还支持SAX解析器,这种解析方式适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存。 6. **Namespace支持**:DOM4J提供了对XML命名空间的全面...
1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件
Java DOM4J解析XML详解 XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档存储等领域。DOM4J是Java中一个强大的、轻量级的处理XML的库,它提供了丰富的API来读取、...
【使用dom4j解析XML】 dom4j是一个强大的开源XML框架,它提供了处理XML文档的各种功能,包括解析、创建、修改等。相比W3C DOM API,dom4j的优势在于其内置的XPath支持,允许更方便地定位和操作XML文档中的节点。 *...
通过学习和实践这些基本操作,你可以熟练掌握DOM4J解析XML的技巧,为你的Java项目中处理XML数据提供强大的支持。在项目中遇到具体问题时,可以参考DOM4J的官方文档,或利用在线资源进行更深入的学习。
在“dom4j解析xml文件(增删改查)”这个主题中,我们将深入探讨如何使用DOM4J来实现XML文档的四种基本操作:增加元素、删除元素、更新元素内容以及查询元素。 首先,让我们了解DOM4J的基本用法。在解析XML文件时,...
DOM4J不仅是一个解析XML的工具,还可以用作XML数据绑定库,将XML数据映射到Java对象。此外,DOM4J还支持Java 5的注解,这使得XML文档的处理更加直观和简洁。结合其灵活性和高性能,DOM4J成为Java开发人员处理XML文档...
为了在Java项目中使用DOM4J解析XML,你需要将这两个jar文件(dom4j-1.6.1和jaxen-1.1-beta-7.jar)添加到你的类路径(classpath)中。这可以通过在IDE中配置构建路径,或者在命令行中指定 `-cp` 参数来完成。一旦...
要开始解析XML文件,首先需要导入DOM4J的相关包: ```java import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; ``` 接下来,我们将创建...
在这个实例中,我们将深入探讨如何使用DOM4J解析XML文件,并通过`Dom4jTest1.java`这个示例程序来理解其工作原理。 首先,我们需要了解XML(Extensible Markup Language)是一种标记语言,常用于存储和传输数据。...
在提供的文件列表中,`Test.java`可能包含使用DOM4J解析XML的示例代码。通常,这样的代码会包含以下部分: ```java import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; // ...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。DOM4J的名字来源于DOM(Document Object Model)和Java的结合,但它的设计理念比标准DOM更先进...
本节将深入探讨Java中解析XML的方法,特别是使用DOM4J库进行解析。 XML解析方法主要有四种:DOM(文档对象模型)、SAX(简单API for XML)、StAX(流式API for XML)以及DOM4J。每种方法都有其特定的优势和适用场景...
使用DOM解析XML的基本步骤如下: 1. 创建DocumentBuilderFactory实例。 2. 使用DocumentBuilderFactory创建DocumentBuilder实例。 3. 使用DocumentBuilder的parse()方法解析XML文件,得到Document对象。 4. 通过...