Java dom4j生成与解析XML案例详解

Java dom4j生成与解析XML案例详解

什么是dom4j?

dom4j是一个开放源代码的Java XML解析器,它基于Java标准的DOM和XPath接口,并扩展了DOM和XPath库以实现更好的性能和易用性。dom4j能够读取XML文档、遍历XML元素树、编辑XML文档并生成新的XML文档。

dom4j生成XML

dom4j生成XML是指使用dom4j API创建XML文档,可以为文档添加元素、属性和文本节点等。下面是生成XML的步骤:

  1. 加载dom4j库和相关类

```java
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;

//...
```

  1. 创建XML文档对象、根节点

java
Document document = DocumentHelper.createDocument();
Element root = document.addElement("root");

  1. 添加子节点和元素

java
Element child = root.addElement("child");
child.addAttribute("key", "value");
child.setText("Hello, world!");

  1. 输出XML文档

java
XMLWriter writer = new XMLWriter(new FileOutputStream(new File("output.xml")));
writer.write(document);
writer.close();

这段代码生成了一个XML文档,根节点为<root>,包含一个名为<child>的子节点,该子节点拥有一个名为key的属性和一个文本值为Hello, world!的文本节点。输出的XML文档保存在名为output.xml的文件中。

dom4j解析XML

dom4j解析XML是指使用dom4j API读取XML文档,获取文档元素、属性和数据等。下面是解析XML的步骤:

  1. 加载dom4j库和相关类

```java
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

//...
```

  1. 创建SAXReader,加载XML文档

java
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));

  1. 获取文档根节点和子节点

java
Element root = document.getRootElement();
Element child = root.element("child");

  1. 获取节点属性和数据

java
String attributeValue = child.attributeValue("key");
String textValue = child.getText();

这段代码读取名为input.xml的XML文档,获取根节点<root>和子节点<child>,并获取子节点的属性key的值和文本值。注意这里的getText()方法返回的是Doucment内部的文本数据,即除去子标签的所有内容。

示例1

下面是一个完整的例子,首先生成一个XML文档,然后使用SAXReader解析该文档,并输出解析结果。

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 生成和解析XML文档的例子,包含一个子节点及其属性和数据。
 */
public class XmlExample {
    public static void main(String[] args) {
        try {
            String fileName = "example.xml";
            // 生成XML文档
            Document document = DocumentHelper.createDocument();
            Element root = document.addElement("root");
            Element child = root.addElement("child");
            child.addAttribute("key", "value");
            child.setText("Hello, world!");
            XMLWriter writer = new XMLWriter(new FileOutputStream(new File(fileName)));
            writer.write(document);
            writer.close();

            // 解析XML文档
            SAXReader reader = new SAXReader();
            Document document2 = reader.read(new File(fileName));
            Element root2 = document2.getRootElement();
            Element child2 = root2.element("child");
            String attributeValue = child2.attributeValue("key");
            String textValue = child2.getText();
            System.out.println("Attribute: " + attributeValue + ", Text: " + textValue);
        } catch (IOException |DocumentException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

执行该代码,可看到输出结果为:

Attribute: value, Text: Hello, world!

示例2

下面是另一个完整的例子,首先使用SAXReader解析一个XML文档,然后对文档进行遍历和修改,并生成一个新的XML文档。

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

/**
 * 解析和修改XML文档的例子,包含一些元素和文本数据。
 */
public class XmlExample2 {
    public static void main(String[] args) {
        try {
            String fileName = "example2.xml";
            // 解析XML文档
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File(fileName));
            Element root = document.getRootElement();

            // 遍历和修改XML文档
            List<Element> elements = root.elements();
            for (Element element : elements) {
                if (element.getName().equals("child")) {
                    Element newElement = element.addElement("newNode");
                    newElement.addAttribute("key", "newvalue");
                    newElement.addText("newdata");
                    element.remove(element.element("subnode"));
                }
            }

            // 保存修改后的XML文档
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter writer = new XMLWriter(new FileOutputStream(new File("output2.xml")), format);
            writer.write(document);
            writer.close();
        } catch (IOException | DocumentException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

这个例子从名为example2.xml的XML文档中读取所有元素,遍历每个元素并做出操作,然后输出修改后的XML文件到名为output2.xml的文件。做出的操作是:如果该元素名字为child,向其添加一个名为newNode的新元素、一个名为key的属性和一个文本值为newdata的文本节点,并移除名为subnode的子节点。运行这个代码,可得到一个新的XML文档,其内容与源文档类似,但是经过了修改。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java dom4j生成与解析XML案例详解 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • HTML表格标记教程(10):单元格边距属性CELLPADDING

    下面是HTML表格标记教程(10):单元格边距属性CELLPADDING的详细讲解攻略: 什么是CELLPADDING属性 CELLPADDING是HTML表格标记语言中用于设置单元格内边距距离的属性。对于单元格内部的内容来说,如果需要和单元格边框之间有一定的距离,那么就可以利用CELLPADDING属性来实现。 CELLPADDING属性用法 CELLPA…

    html 2023年5月30日
    00
  • 织梦dedecms网站模板乱码的几种解决方法

    下面是“织梦dedecms网站模板乱码的几种解决方法”的完整攻略: 织梦dedecms网站模板乱码的几种解决方法 1. 修改php.ini文件 在织梦dedecms网站模板中出现乱码问题,有时是因为php.ini文件编码格式和网站的编码格式不一致导致的。可以尝试修改php.ini文件来解决这个问题。 步骤如下: 找到php.ini文件,一般在php安装目录下…

    html 2023年5月31日
    00
  • Android apk反编译基础(apktoos)图文教程

    首先我们来详细讲解“Android apk反编译基础(apktoos)图文教程”的完整攻略。 一、前言 在进行apk应用开发或分析的时候,我们有时候需要对apk进行反编译以获取其中的代码、资源等信息。这个时候,APKTool这个工具就非常有用。APKTool是一个可以反编译和重新打包APK的开源工具,可以将一个APK文件解包为一个文件夹,包括资源文件和编译后…

    html 2023年5月30日
    00
  • iis伪静态中文url出现乱码的解决办法

    以下是关于”iis伪静态中文url出现乱码的解决办法”的详细攻略: 背景 IIS是Microsoft开发的Web服务器程序,为Windows操作系统提供Web服务。伪静态是当接收到请求后,通过URL Rewrite将参数重写成带有扩展名的静态URL,并且让用户认为它是静态的。而中文URL出现乱码的问题,则是因为IIS默认以Unicode编码的方式处理URL。…

    html 2023年5月31日
    00
  • GET方法URL中传递中文参数乱码的解决方法

    针对“GET方法URL中传递中文参数乱码的解决方法”,以下是完整的攻略: 问题描述 在使用GET方法传递中文参数时,经常会出现乱码的情况。例如以下的URL,参数name是中文,但是在浏览器中显示的是乱码。 http://www.example.com/page?name=张三 原因分析 GET方法将参数附加在URL的末尾,如果参数中含有中文字符,需要对中文进…

    html 2023年5月31日
    00
  • 利用Shell解析处理XML的方法汇总

    利用Shell解析处理XML的方法汇总 在Shell下解析XML文件有多种方法,这里对一些常用的做一个汇总。以下所有示例都基于以下的XML文件: <?xml version="1.0" encoding="UTF-8"?> <catalog> <book id="bk101&qu…

    html 2023年5月30日
    00
  • asp.net XML文件操作实现代码

    下面是关于“ASP.NET XML文件操作实现代码”的详细攻略。 导入 System.Xml 命名空间 在使用 XML 文件操作前,需要先导入 System.Xml 命名空间,使用如下语句: using System.Xml; 创建 XmlDocument 对象 在使用 XML 文件操作时,需要先创建 XmlDocument 对象。通过 XmlDocumen…

    html 2023年5月30日
    00
  • php PDO中文乱码解决办法

    以下是PHP PDO中文乱码解决的完整攻略: 1. 确认数据库及表的编码 在使用PDO连接数据库时,建议将数据库(如MySQL)及表的编码都设置为UTF-8,确保所有数据都使用同一种编码。要确认当前使用的编码,可以进行如下查询: SHOW CREATE DATABASE database_name; SHOW CREATE TABLE table_name;…

    html 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部