导读:本期聚焦于小伙伴创作的《如何在Java中生成XML文件?DOM、JDOM与DOM4J三种方式详解》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在Java中生成XML文件?DOM、JDOM与DOM4J三种方式详解》有用,将其分享出去将是对创作者最好的鼓励。

Java中构造、生成XML简明教程

XML作为一种通用的数据交换格式,在Java开发中经常被用来存储配置信息、传输数据等。很多场景下我们需要手动构造和生成XML文件,本文将介绍几种常用的Java生成XML的方式,帮助你快速上手相关操作。

一、使用JDK自带的DOM方式生成XML

DOM(Document Object Model)是JDK原生支持的方式,不需要引入额外依赖,适合生成结构简单的XML文件。它的核心思路是先构建内存中的XML文档树,再将文档写入到文件或输出流中。

下面是使用DOM方式生成XML的完整示例:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class DomXmlGenerator {
    public static void main(String[] args) {
        try {
            // 1. 创建DocumentBuilderFactory实例
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            // 2. 通过工厂获取DocumentBuilder
            DocumentBuilder builder = factory.newDocumentBuilder();
            // 3. 创建空的Document文档对象
            Document document = builder.newDocument();
            // 禁用standalone属性
            document.setXmlStandalone(true);
            
            // 4. 创建根节点
            Element rootElement = document.createElement("students");
            document.appendChild(rootElement);
            
            // 5. 创建第一个学生节点
            Element student1 = document.createElement("student");
            // 给student节点添加id属性
            student1.setAttribute("id", "1001");
            // 创建name子节点
            Element name1 = document.createElement("name");
            name1.setTextContent("张三");
            // 创建age子节点
            Element age1 = document.createElement("age");
            age1.setTextContent("20");
            // 将子节点添加到student节点
            student1.appendChild(name1);
            student1.appendChild(age1);
            // 将student节点添加到根节点
            rootElement.appendChild(student1);
            
            // 6. 创建第二个学生节点
            Element student2 = document.createElement("student");
            student2.setAttribute("id", "1002");
            Element name2 = document.createElement("name");
            name2.setTextContent("李四");
            Element age2 = document.createElement("age");
            age2.setTextContent("21");
            student2.appendChild(name2);
            student2.appendChild(age2);
            rootElement.appendChild(student2);
            
            // 7. 创建TransformerFactory实例,用于将Document转换为XML
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            // 设置输出属性,添加换行和缩进
            transformer.setOutputProperty("encoding", "UTF-8");
            transformer.setOutputProperty("indent", "yes");
            
            // 8. 将Document写入到文件
            DOMSource domSource = new DOMSource(document);
            StreamResult streamResult = new StreamResult("students.xml");
            transformer.transform(domSource, streamResult);
            
            System.out.println("DOM方式生成XML完成,文件路径:students.xml");
        } catch (ParserConfigurationException | TransformerException e) {
            e.printStackTrace();
        }
    }
}

运行上述代码后,会在项目根目录下生成students.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<students>
    <student id="1001">
        <name>张三</name>
        <age>20</age>
    </student>
    <student id="1002">
        <name>李四</name>
        <age>21</age>
    </student>
</students>

DOM方式的优点是原生支持无需额外依赖,操作简单直观;缺点是如果XML结构非常复杂,构建节点的代码会比较冗长,且大文件场景下内存占用较高。

二、使用JDOM方式生成XML

JDOM是专门为Java设计的XML操作库,相比原生DOM,它的API更符合Java开发者的使用习惯,代码更简洁。使用前需要先引入JDOM的依赖,如果你使用Maven,可以在pom.xml中添加如下依赖:

<dependency>
    <groupId>org.jdom</groupId>
    <artifactId>jdom2</artifactId>
    <version>2.0.6.1</version>
</dependency>

下面是使用JDOM生成XML的示例代码:

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import java.io.FileOutputStream;
import java.io.IOException;

public class JdomXmlGenerator {
    public static void main(String[] args) {
        try {
            // 1. 创建根节点
            Element rootElement = new Element("students");
            // 2. 创建第一个学生节点
            Element student1 = new Element("student");
            student1.setAttribute("id", "1001");
            student1.addContent(new Element("name").setText("张三"));
            student1.addContent(new Element("age").setText("20"));
            // 3. 创建第二个学生节点
            Element student2 = new Element("student");
            student2.setAttribute("id", "1002");
            student2.addContent(new Element("name").setText("李四"));
            student2.addContent(new Element("age").setText("21"));
            // 4. 将学生节点添加到根节点
            rootElement.addContent(student1);
            rootElement.addContent(student2);
            // 5. 创建Document对象,传入根节点
            Document document = new Document(rootElement);
            // 6. 创建XML输出器,设置输出格式:编码UTF-8,自动缩进换行
            XMLOutputter outputter = new XMLOutputter();
            outputter.setFormat(Format.getPrettyFormat().setEncoding("UTF-8"));
            // 7. 将Document写入文件
            outputter.output(document, new FileOutputStream("students_jdom.xml"));
            
            System.out.println("JDOM方式生成XML完成,文件路径:students_jdom.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

JDOM的代码明显比原生DOM更简洁,链式调用让节点构建更清晰,它屏蔽了很多DOM底层复杂的操作,让开发者更专注于XML结构的设计。不过需要额外引入第三方依赖,适合对代码简洁度有要求的场景。

三、使用DOM4J方式生成XML

DOM4J也是非常流行的XML操作库,性能优异,API丰富,很多开源框架都在使用它处理XML。同样需要先引入依赖,Maven依赖如下:

<dependency>
    <groupId>org.dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>2.1.4</version>
</dependency>

下面是DOM4J生成XML的示例代码:

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.FileOutputStream;
import java.io.IOException;

public class Dom4jXmlGenerator {
    public static void main(String[] args) {
        try {
            // 1. 创建Document对象
            Document document = DocumentHelper.createDocument();
            // 2. 创建根节点
            Element rootElement = document.addElement("students");
            // 3. 创建第一个学生节点
            Element student1 = rootElement.addElement("student")
                    .addAttribute("id", "1001");
            student1.addElement("name").setText("张三");
            student1.addElement("age").setText("20");
            // 4. 创建第二个学生节点
            Element student2 = rootElement.addElement("student")
                    .addAttribute("id", "1002");
            student2.addElement("name").setText("李四");
            student2.addElement("age").setText("21");
            // 5. 设置输出格式:编码UTF-8,自动缩进换行
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("UTF-8");
            // 6. 创建XMLWriter,写入文件
            XMLWriter writer = new XMLWriter(new FileOutputStream("students_dom4j.xml"), format);
            writer.write(document);
            writer.close();
            
            System.out.println("DOM4J方式生成XML完成,文件路径:students_dom4j.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

DOM4J的API设计非常灵活,支持XPath查询、大文件流式处理等高级功能,性能表现也很出色,是实际项目中使用非常广泛的选择。如果你的项目需要处理复杂的XML操作,DOM4J会是很好的选择。

四、三种方式对比

为了帮助你根据实际场景选择合适的方式,下面从几个维度对比三种生成XML的方式:

方式依赖情况代码简洁度功能丰富度适用场景
JDK DOM无需额外依赖较低,代码冗长基础简单XML生成,不想引入第三方依赖的场景
JDOM需要引入JDOM库较高,符合Java习惯中等追求代码简洁度,XML操作需求不复杂的场景
DOM4J需要引入DOM4J库高,API灵活丰富,支持高级特性复杂XML操作,对性能和功能有要求的场景

你可以根据项目的实际需求、是否允许引入第三方依赖等因素,选择最适合自己的XML生成方式。如果是简单的配置类XML生成,原生DOM足够使用;如果是业务系统中频繁操作XML,推荐优先选择DOM4J。

Java生成XMLDOMJDOMDOM4JXML教程 本作品最后修改时间:2026-05-22 21:36:43

免责声明:网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。