XML 格式化工具

格式化并美化 XML,带有语法高亮

加载示例

XML 输入

格式化后的 XML

本地运行 · 粘贴密钥安全无忧
格式化后的 XML 将显示在此处…

什么是 XML 格式化?

XML 格式化(也称为 XML 美化或 XML 整理)是指为 XML 文档添加一致缩进和换行符的过程,使其层级结构清晰可见。来自 API、配置生成器或序列化器的原始 XML 通常以单行形式交付,标签之间没有任何空白。XML 格式化工具将文档解析为树形结构,然后以规则的间距重新序列化。

XML 1.0 规范(W3C 推荐标准,第五版)定义了严格的语法:每个开始标签必须有对应的结束标签或为自闭合标签,属性值必须加引号,五个字符(<、>、&、"、')需使用实体转义。格式化工具在遵守这些规则的同时,只插入不影响文档信息集(infoset)的无意义空白。

格式化后的 XML 在代码审查时更易阅读,在版本控制中更易对比差异,在服务返回异常数据时更易调试。格式化操作本身是无损的:文档的逻辑内容保持不变,只有呈现方式发生变化。git diff 和代码审查平台只显示修改的行——一致缩进的 XML 确保差异反映真实变更,而非格式调整带来的噪音。

Before · xml
After · xml
<catalog><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date></book><book id="bk102"><author>Ralls, Kim</author><title>Midnight Rain</title><genre>Fantasy</genre><price>5.95</price><publish_date>2000-12-16</publish_date></book></catalog>
<catalog>
  <book id="bk101">
    <author>Gambardella, Matthew</author>
    <title>XML Developer's Guide</title>
    <genre>Computer</genre>
    <price>44.95</price>
    <publish_date>2000-10-01</publish_date>
  </book>
  <book id="bk102">
    <author>Ralls, Kim</author>
    <title>Midnight Rain</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2000-12-16</publish_date>
  </book>
</catalog>

为什么使用在线 XML 格式化工具?

手动格式化 XML 既容易出错又耗时,尤其是对于嵌套较深或包含混合命名空间的文档。基于浏览器的格式化工具无论文件大小,都能在一秒内给出格式化结果。

即时美化
粘贴或输入 XML,立即获得缩进后的输出。无需等待 CLI 工具安装,也无需执行构建步骤。
🔒
隐私优先处理
所有解析和格式化操作均在浏览器中通过 DOMParser API 完成。您的 XML 不会离开本机,也不会发送到任何服务器。
🎨
可配置缩进
在 2 个空格、4 个空格或制表符缩进之间自由选择,以匹配项目的编码规范,无需修改配置文件。
📋
无需账号或安装
打开页面,粘贴 XML,复制结果即可。无需注册,无需桌面软件,也无需浏览器扩展。

XML 格式化工具使用场景

前端开发
检查 CMS 返回的 SVG 标记或 XHTML 片段。格式化原始输出后,可以快速定位特定属性和嵌套分组。
后端工程
调试来自第三方服务的 SOAP 响应、RSS 订阅或 XML-RPC 负载。格式化输出便于追踪缺失元素或错误的命名空间。
DevOps 与 CI/CD
阅读机器生成的无缩进 Maven pom.xml 文件、Ant 构建脚本或 .csproj 项目文件。提交前格式化,保持差异整洁。
质量保证与测试
在集成测试中对比预期与实际的 XML 负载。将两者格式化为相同缩进风格,消除因空白差异导致的误报。
数据工程
检查来自数据库、ETL 管道或政府开放数据门户的 XML 导出文件。格式化后的 XML 在编写 XSLT 转换或 XPath 查询前能清晰呈现记录结构。
学习 XML
正在学习 W3C XML 教程的学员可以将练习文件粘贴到格式化工具中,验证嵌套结构和属性语法是否正确。

XML 预定义实体参考

XML 为其语法保留了五个字符。当这些字符以文本内容或属性值的形式出现时,必须替换为预定义实体引用。正确的格式化工具在美化过程中会保留这些实体。

字符在 XML 中的作用实体
<Start of tag&lt;
>End of tag&gt;
&Start of entity&amp;
"Attribute delimiter&quot;
'Attribute delimiter&apos;

XML 缩进风格对比

XML 缩进没有统一的标准。选择取决于团队规范和工作流中使用的工具。以下是三种最常见的风格。

2 个空格(推荐)
Web 相关 XML 最常见的选择:SVG、XHTML、SOAP、Spring 配置。嵌套较深的文档保持紧凑。大多数在线格式化工具和 IDE 的默认设置。
4 个空格
在 Java 生态系统中(Maven、Ant、Android 清单文件)较为常见,这些文件的嵌套层级很少超过 3-4 层。与 Java 和 C# 代码的默认缩进保持一致。
制表符
允许每位开发者在编辑器中设置自己偏好的视觉宽度。常见于遗留项目和部分 Microsoft 工具(.csproj、.nuspec)。比空格缩进产生更小的文件体积。

代码示例:以编程方式格式化 XML

在脚本或构建流程中格式化 XML 时,主流语言均提供内置或标准库方案。以下是可直接复制使用的示例。

JavaScript (DOM API)
const raw = '<root><item>hello</item></root>'
const parser = new DOMParser()
const doc = parser.parseFromString(raw, 'application/xml')
const serializer = new XMLSerializer()
const xml = serializer.serializeToString(doc)

// Indent with XSLT (browser-native approach)
const xslt = new DOMParser().parseFromString(`
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="node()|@*">
      <xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
    </xsl:template>
  </xsl:stylesheet>`, 'application/xml')

const proc = new XSLTProcessor()
proc.importStylesheet(xslt)
const formatted = proc.transformToDocument(doc)
console.log(new XMLSerializer().serializeToString(formatted))
// → <root>\n  <item>hello</item>\n</root>
Python
import xml.dom.minidom

raw = '<root><item>hello</item><item>world</item></root>'
dom = xml.dom.minidom.parseString(raw)
print(dom.toprettyxml(indent='  '))
# → <?xml version="1.0" ?>
# → <root>
# →   <item>hello</item>
# →   <item>world</item>
# → </root>

# With lxml (handles namespaces, XSD, large files)
from lxml import etree
tree = etree.fromstring(raw.encode())
print(etree.tostring(tree, pretty_print=True).decode())
Go
package main

import (
    "encoding/xml"
    "fmt"
    "strings"
)

func formatXML(raw string) (string, error) {
    decoder := xml.NewDecoder(strings.NewReader(raw))
    var out strings.Builder
    encoder := xml.NewEncoder(&out)
    encoder.Indent("", "  ")
    for {
        tok, err := decoder.Token()
        if err != nil {
            break
        }
        encoder.EncodeToken(tok)
    }
    encoder.Flush()
    return out.String(), nil
}
// formatXML("<a><b>1</b></a>") → "<a>\n  <b>1</b>\n</a>"
CLI (xmllint)
# Format XML file with xmllint (part of libxml2, pre-installed on macOS/Linux)
xmllint --format input.xml > formatted.xml

# Format from stdin
echo '<a><b>1</b></a>' | xmllint --format -
# → <?xml version="1.0"?>
# → <a>
# →   <b>1</b>
# → </a>

# Validate and format at the same time
xmllint --format --schema schema.xsd input.xml

常见问题

格式化 XML 会改变文档的含义吗?
不会。XML 格式化只在标签之间添加或删除无意义的空白。XML 信息集(infoset)保持不变。一个例外:如果您的 schema 在某些元素上使用了 xml:space="preserve",格式化工具应保持这些元素原样,本工具遵守这一规则。
XML 格式化与 XML 验证有什么区别?
格式化是添加缩进和换行符,使 XML 具有可读性。验证则检查文档是否符合 schema(XSD、DTD 或 RelaxNG)。一个文档可以格式正确但不符合其 schema。使用本工具提高可读性,使用 XML 验证器工具进行 schema 合规检查。
可以格式化带命名空间的 XML 吗?
可以。浏览器的 DOMParser 原生支持 XML 命名空间。命名空间前缀、默认命名空间声明(xmlns)以及带限定名称的属性在格式化过程中均会被保留。格式化工具不会添加、删除或重命名任何命名空间绑定。
在浏览器中最大可以格式化多大的 XML 文件?
基于浏览器的格式化对约 10 MB 以内的文档效果良好。超过此大小,DOM 树会占用大量内存,界面可能变得无响应。对于非常大的文件,建议使用 CLI 工具,如 xmllint --format,它以流式方式处理 XML。
为什么格式化后的 XML 多了一个 XML 声明?
部分格式化工具在序列化 DOM 树时会在开头添加 <?xml version="1.0"?>。在编码为 UTF-8 时,XML 1.0 中此声明是可选的。如果不需要,可以删除输出的第一行。该声明不影响任何符合规范的 XML 处理器的解析。
XML 格式化和 XML 压缩是一回事吗?
两者是相反的操作。格式化添加空白以提高可读性;压缩则删除所有非必要空白以减小文件体积。两种操作对于 XML 信息集而言都是无损的。如果需要压缩 XML,请使用 XML 压缩工具。
XML 格式化与 HTML 格式化有什么区别?
XML 严格要求每个标签都必须闭合,属性值必须加引号,文档必须只有一个根元素。HTML(特别是 HTML5)则较为宽松:可选的闭合标签、不加引号的属性以及 &lt;br&gt; 等空元素均合法。XML 格式化工具会拒绝无效的 XML,而 HTML 格式化工具则容忍 XML 不允许的语法。