Java中如何格式化输出XML字符串

来源:Golang编程网作者:美谷头衔:网络博主
导读:本期聚焦于小伙伴创作的《Java中如何格式化输出XML字符串》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Java中如何格式化输出XML字符串》有用,将其分享出去将是对创作者最好的鼓励。

在Java开发中,处理XML数据是常见需求,生成或者解析XML后,原始的XML字符串往往没有换行和缩进,可读性很差,这时候就需要对XML字符串进行格式化输出,让结构更清晰。

Java中如何格式化输出XML字符串

使用JDK自带的Transformer类格式化XML

JDK自带的javax.xml.transform包下的类可以直接实现XML格式化,不需要引入额外的第三方依赖,适合对依赖有严格限制的项目。

实现步骤如下:

  • 将XML字符串转换为Document对象
  • 创建Transformer实例并设置输出属性,开启缩进和换行
  • Document转换回字符串输出

完整代码示例如下:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import java.io.ByteArrayInputStream;
import java.io.StringWriter;

public class XmlFormatUtil {
    public static String formatXmlWithJdk(String xmlStr) throws Exception {
        // 解析XML字符串为Document对象
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(new ByteArrayInputStream(xmlStr.getBytes("UTF-8")));
        
        // 创建Transformer并设置格式化属性
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        // 设置输出编码
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        // 开启缩进
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        // 设置缩进量,部分Transformer实现支持该属性
        transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
        
        // 执行转换,输出到字符串
        StringWriter writer = new StringWriter();
        transformer.transform(new DOMSource(document), new StreamResult(writer));
        return writer.toString();
    }
    
    public static void main(String[] args) {
        String rawXml = "<?xml version="1.0" encoding="UTF-8"?><user><id>1</id><name>张三</name><age>25</age></user>";
        try {
            String formattedXml = formatXmlWithJdk(rawXml);
            System.out.println(formattedXml);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用dom4j库格式化XML

dom4j是常用的XML处理第三方库,提供了更简洁的API,使用起来比JDK原生API更方便,很多项目都会引入这个依赖。

首先需要引入dom4j的依赖,如果是Maven项目,在pom.xml中添加如下依赖:

<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.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.StringWriter;

public class XmlFormatUtil {
    public static String formatXmlWithDom4j(String xmlStr) throws Exception {
        // 解析XML字符串为Document对象
        Document document = DocumentHelper.parseText(xmlStr);
        // 创建格式化对象,设置缩进为4个空格,开启换行
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setIndentSize(4);
        format.setEncoding("UTF-8");
        
        // 输出到字符串
        StringWriter writer = new StringWriter();
        XMLWriter xmlWriter = new XMLWriter(writer, format);
        xmlWriter.write(document);
        xmlWriter.close();
        return writer.toString();
    }
    
    public static void main(String[] args) {
        String rawXml = "<?xml version="1.0" encoding="UTF-8"?><user><id>1</id><name>张三</name><age>25</age></user>";
        try {
            String formattedXml = formatXmlWithDom4j(rawXml);
            System.out.println(formattedXml);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

两种方法的对比

两种方法的适用场景不同,我们可以通过下表对比两者的特点:

对比项JDK原生Transformerdom4j库
依赖要求无额外依赖,JDK自带需要引入dom4j依赖
API复杂度代码相对繁琐,步骤较多API简洁,代码量少
格式化效果依赖具体Transformer实现,部分场景缩进可能不符合预期格式化效果稳定,可自定义配置项多
适用场景不允许引入第三方依赖的项目已经引入dom4j或者可以引入依赖的项目

注意事项

在实际使用中需要注意几个问题:

  • 输入的XML字符串必须是格式正确的,否则解析会抛出异常
  • 如果XML中包含特殊字符,需要确保编码设置正确,避免乱码
  • 使用JDK原生方法时,不同JDK版本的Transformer实现可能有差异,缩进效果可能不同
  • 如果处理超大XML字符串,需要注意内存占用,避免OOM问题

以上就是Java中格式化输出XML字符串的两种常用方法,开发者可以根据项目的实际情况选择合适的方式实现。

JavaXML格式化输出dom4j修改时间:2026-07-09 03:42:27

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