Skip to content

在线 XML 格式化工具

在浏览器中美化、压缩和验证 XML — 数据不离开设备。重新缩进杂乱的 XML,并报告格式错误的行列位置。免费、隐私保护,无需注册。

无追踪 浏览器中运行 免费
缩进
XML 输出
已审核 XML 1.0 格式良好性合规性、无损格式化以及准确的错误报告 — Go Tools 工程团队 · 2026年5月29日

什么是 XML 格式化工具?为什么需要它?

XML(可扩展标记语言)是一种基于文本的结构化数据格式,广泛应用于 Web 服务、配置文件、RSS Feed、SOAP API、Office 文档(DOCX、XLSX)、SVG 图形和 Android 布局文件等各类场景。与 JSON 不同,XML 支持注释、命名空间、混合内容(文本和元素交错)以及文档类型声明 — 使其成为企业集成、文档交换以及结构化数据需要与人类可读标记共存场景的首选格式。

现实中的 XML 往往缩进混乱或完全压缩 — API 响应以单行形式返回,配置文件积累了不一致的缩进,序列化器生成的 XML 完全没有空白字符。XML 格式化工具将这些杂乱的输入重新缩进为整洁的层级结构,每一层嵌套都清晰可见。这对代码审查、调试、文档编写以及理解陌生 XML 模式至关重要。

**本工具与普通文本编辑器的区别:**

**1. 格式良好性验证,精确定位错误。** 格式化器使用浏览器的 DOMParser(解析 HTML 和 SVG 的同一引擎)来解析 XML。如果文档格式不良好 — 标签不匹配、未闭合的元素、未转义的字符或多个根元素 — 解析器会报告失败的确切行号和列号。这比肉眼查找哪个标签意外未闭合要快得多。

**2. 无损格式化。** 格式化器完整保留注释、处理指令、CDATA 节、命名空间声明、属性顺序以及所有文本内容。它只调整元素标签之间的空白字符。你可以安全地格式化任何重要的 XML — 任何有意义的内容都不会改变。

**3. 生产使用的压缩功能。** 压缩器去除所有非有效的元素间空白字符,生成最小的有效 XML 表示。这是将 XML 存储到数据库列、作为字符串插入 JSON,或通过按字节计费的渠道传输前正确的预处理步骤。

**4. 100% 浏览器端隐私保护。** 医疗 XML(HL7、FHIR)、财务数据、含凭证的 SOAP 载荷以及内部配置文件都是常见的包含敏感数据的 XML 载荷。本工具不上传任何内容 — 所有处理均在浏览器的 JavaScript 引擎中运行。如需转换而非格式化,请使用配套工具:XML 转 JSON 转换器JSON 转 XML 转换器

<!-- Minified XML input -->
<?xml version="1.0" encoding="UTF-8"?><catalog><product id="p01"><name>Wireless Headphones</name><price currency="USD">79.99</price></product></catalog>

<!-- After formatting with 2-space indent -->
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <product id="p01">
    <name>Wireless Headphones</name>
    <price currency="USD">79.99</price>
  </product>
</catalog>

核心功能

支持 2 或 4 空格缩进的美化功能

将 XML 重新缩进为整洁、可读的层级结构。在格式化前选择 2 空格(Web 服务、RSS 和配置文件最常用)或 4 空格(企业级 XML 模式常见)缩进。

压缩 — 去除非有效空白字符

在不影响文本内容的前提下去除元素标签间的所有空白字符,生成最小的有效 XML。适用于存储、传输或作为字符串嵌入 JSON 或其他格式。

格式良好性验证,精确报告行列错误

使用浏览器内置的 DOMParser 验证 XML 结构,报告首个格式良好性错误(标签不匹配、未闭合元素、未转义字符)的确切行号和列号,快速定位问题。

无损处理:保留注释、命名空间和属性

注释、处理指令、CDATA 节、命名空间声明和属性顺序均被完整保留。仅修改标签之间的非有效空白字符 — 内容绝不会被篡改。

100% 浏览器端 — 不上传,无服务器

所有处理均在浏览器本地运行。包含凭证、医疗数据、财务记录或内部配置的 XML 载荷不会被传输到任何服务器,也不会被记录。

支持 SOAP、RSS、SVG、XHTML 和 Android XML

可处理任何格式良好的 XML 应用:带 WS-Security 头部的 SOAP 信封、RSS/Atom Feed、SVG 文件、XHTML 文档、Android 布局 XML、Maven POM 以及 Maven/Ant 构建文件。

示例

杂乱/压缩的 XML

<?xml version="1.0" encoding="UTF-8"?><catalog><product id="p01" category="electronics"><name>Wireless Headphones</name><price currency="USD">79.99</price><stock>142</stock><tags><tag>audio</tag><tag>bluetooth</tag></tags></product><product id="p02" category="books"><name>Learning XML</name><price currency="USD">29.99</price><stock>55</stock></product></catalog>

一个紧凑的单行 XML 产品目录。点击「格式化」将其缩进为带 2 空格缩进的可读树形结构。元素层级、属性和文本内容均被完整保留 — 格式化纯粹是外观上的调整,不影响任何数据。

RSS Feed 片段

<rss version="2.0"><channel><title>Go Tools Blog</title><link>https://go-tools.org/blog</link><description>Developer tools, tips and tutorials</description><item><title>Understanding XML Namespaces</title><link>https://go-tools.org/blog/xml-namespaces-guide</link><pubDate>Thu, 29 May 2026 00:00:00 GMT</pubDate><description>A deep dive into XML namespace declarations, prefixes, and scope rules with practical examples.</description></item><item><title>XML vs JSON: When to Use Each</title><link>https://go-tools.org/blog/xml-vs-json</link><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate></item></channel></rss>

一个包含两条条目的 RSS 2.0 Feed,被压缩为单行。格式化后,频道元数据和每个 item 元素都会清晰地缩进显示,方便检查 Feed 结构、添加新条目,或与 Feed 验证器的要求进行对比。

SOAP 信封

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsse:UsernameToken><wsse:Username>api-client</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-ext-1.0.xsd#PasswordText">s3cr3t</wsse:Password></wsse:UsernameToken></wsse:Security></soap:Header><soap:Body><GetOrderRequest xmlns="http://example.com/orders"><OrderId>ORD-20260529-001</OrderId><IncludeLineItems>true</IncludeLineItems></GetOrderRequest></soap:Body></soap:Envelope>

一个带有 WS-Security 头部和 GetOrder 消息体的 SOAP 1.1 信封,使用了三个命名空间前缀(soap:、wsse: 和默认命名空间)。格式化后,头部与消息体的分隔以及命名空间声明一目了然 — 对调试 SOAP 集成和阅读 WSDL 生成的载荷至关重要。

使用方法

  1. 1

    粘贴 XML 数据

    在上方输入框中输入或粘贴 XML 数据。也可以点击「加载示例」试用示例(一个格式化效果良好的压缩产品目录 XML)。

  2. 2

    选择操作

    点击「格式化」以带缩进的方式美化 XML,点击「压缩」以去除空白字符,或点击「验证」以检查格式良好性。格式化前请选择 2 或 4 空格的缩进大小。

  3. 3

    复制输出结果

    处理后的 XML 显示在输出面板中。点击「复制」将其复制到剪贴板。如果验证发现错误,错误横幅会显示确切的行号和列号。

常见 XML 错误

标签不匹配

XML 标签名称区分大小写,必须完全匹配。 是不同的标签 — XML 会将其视为未闭合的 元素和多余的 。这是手工编辑 XML 时格式良好性错误最常见的原因。

✗ 错误
<products>
  <Item>
    <name>Widget</name>
  </item>
</products>
✓ 正确
<products>
  <item>
    <name>Widget</name>
  </item>
</products>

未转义的 & 符号或小于号

& 和 < 字符在 XML 中是保留字符,在 CDATA 节外必须进行转义。裸 & 即使在属性值中也会导致解析错误。请用 & 代替 &,用 < 代替 <。大于号 > 在文本内容中应转义为 >,但解析器对其较为宽松。

✗ 错误
<query>price > 10 & stock > 0</query>
✓ 正确
<query>price &gt; 10 &amp; stock &gt; 0</query>

属性值未加引号或引号使用不当

所有 XML 属性值必须用单引号或双引号括起来。未加引号的属性值在 HTML5 中有效,但在 XML 中属于格式良好性错误。此外,如果属性值本身包含双引号,则必须使用单引号作为分隔符(或将引号转义为 ")。

✗ 错误
<product id=p01 label="It's a "widget"">
✓ 正确
<product id="p01" label="It's a &quot;widget&quot;">

多个根元素

XML 文档必须有且仅有一个包含所有其他元素的根元素。拼接 XML 片段时常见的错误是最终得到两个或多个并列的顶级元素,这在 XML 中无效(尽管在 HTML 中很常见)。请用单个根容器包裹所有同级元素。

✗ 错误
<user><name>Alice</name></user>
<user><name>Bob</name></user>
✓ 正确
<users>
  <user><name>Alice</name></user>
  <user><name>Bob</name></user>
</users>

缺少 XML 声明或编码不匹配

如果你的 XML 文件以 UTF-16 或其他非 UTF-8 编码保存,但 声明中写的是 encoding="UTF-8"(或省略,默认为 UTF-8),某些解析器会拒绝解析或产生乱码。在浏览器端工具中粘贴时,浏览器会自动处理编码。对于磁盘上的文件,请确保 encoding 属性与实际文件编码一致。

✗ 错误
<?xml version="1.0" encoding="UTF-8"?>
<!-- File is actually saved as UTF-16 -->
✓ 正确
<?xml version="1.0" encoding="UTF-16"?>
<!-- File saved as UTF-16, declaration matches -->

CDATA 节未正确闭合

CDATA 节以 结束。如果 ]]> 结束序列缺失或拼写错误,解析器会将其后所有内容视为 CDATA 节的一部分,直到找到另一个 ]]> 或到达文档末尾。这通常表现为「文档意外结束」错误。

✗ 错误
<script><![CDATA[
  if (a < b && b > c) { return true; }
<!-- ]]> is missing -->
✓ 正确
<script><![CDATA[
  if (a < b && b > c) { return true; }
]]></script>

常见使用场景

调试 SOAP / Web 服务载荷
企业 API 和遗留 Web 服务的 SOAP 响应以单行 XML 字符串形式返回。将原始载荷粘贴到格式化工具中,即可立即查看信封结构、头部和消息体 — 轻松找到所需字段或发现命名空间不匹配问题。如需进一步在 JavaScript 中处理载荷,另见:XML 转 JSON 转换器
验证配置文件和部署描述符
Maven POM 文件、Spring XML 应用上下文、Tomcat server.xml、Android Manifest 文件以及许多其他 Java/企业配置文件都是 XML。在提交前通过验证来发现标签不匹配或编码问题,避免这些问题仅在构建或部署时才暴露出来。
格式化 RSS 和 Atom Feed 输出
RSS 2.0 和 Atom 1.0 Feed 都是 XML。在开发 Feed 生成器或调试 Feed 阅读器兼容性问题时,格式化原始 Feed XML,以便并排检查频道元数据、条目结构和必需的命名空间声明。
阅读和编辑 SVG 文件
从 Figma、Illustrator 或 Sketch 导出的 SVG 文件是有效的 XML,但通常被压缩或包含导出工具产生的过多缩进。格式化 SVG 以获得整洁、可导航的元素树,便于手动编辑路径、组或样式属性。
准备用于存储或传输的 XML
将 XML 存储到数据库列、作为 API 请求中的 JSON 字符串字段发送,或插入消息队列时,请先使用「压缩」去除不必要的空白字符。这能减小载荷大小,并避免大型缩进 XML 字符串中未转义控制字符导致 JSON 解析器出错的问题。
将 XML 转换为 JSON
如需将格式化后的 XML 转换为 JSON 以在 JavaScript 应用或 REST API 中使用,请使用我们的 XML 转 JSON 转换器。反向操作 — 从 JSON 结构生成 XML — 请使用 JSON 转 XML 转换器

技术细节

浏览器 DOMParser 用于 XML 解析
XML 解析使用浏览器原生的 DOMParser,以 'text/xml' MIME 类型处理。这与浏览器中渲染 SVG 和 XHTML 的引擎相同 — 完全符合 XML 1.0 标准,并能报告带行列信息的格式良好性错误。当文档格式不良好时,DOMParser 会返回包含错误信息和位置的 parseerror 文档,本工具会提取并显示该信息。
基于 DOM 树序列化的格式化
格式化通过将 XML 解析为 DOM 树,然后递归遍历树以生成缩进输出来实现。这种方式保留了文档的语义结构:元素嵌套、文本内容、属性、CDATA 节、处理指令和注释均按解析结果原样序列化。仅丢弃元素间纯空白的文本节点 — 包含非空白字符的文本节点始终被保留。
通过去除纯空白文本节点实现压缩
压缩遍历同一 DOM 树,删除内容完全为空白字符(空格、制表符、换行符)的文本节点。包含混合或非空白内容的文本节点 — 标签之间的实际数据 — 绝不会被删除。属性及其值在序列化时不添加额外空白。结果是原始文档最紧凑的格式良好 XML 表示。
100% 浏览器端 — 不上传,无服务器
所有处理均在浏览器的 JavaScript 运行时中完成。数据在任何时候都不会通过网络传输。这对经常包含敏感内容的 XML 载荷尤为重要:SOAP WS-Security 令牌、HL7 患者数据、内部服务配置以及金融消息格式(FIX、SWIFT ISO 20022)。本工具可安全用于任何你不希望粘贴到公共服务的 XML。

最佳实践

先验证,格式化后再提交
先验证 XML 以确认其格式良好,再进行重新格式化 — 如果输入不是有效的 XML,格式化器会静默产生错误的输出。验证通过后,格式化并检查缩进输出,再将配置文件、Feed 模板或 WSDL 定义提交到版本控制。
Web 格式使用 2 空格缩进,企业 XML 使用 4 空格缩进
2 空格缩进是 RSS/Atom Feed、SVG、XHTML、Android XML 以及大多数面向 Web 的 XML 的惯例。4 空格缩进在 Java 企业环境中较为常见(Maven POM、Spring 上下文文件、JBoss 部署描述符)。请与你现有文件和工具链的惯例保持一致。
嵌入 JSON 前先压缩 XML
如果需要将 XML 字符串作为 JSON 字段值嵌入,请务必先压缩它。缩进的 XML 包含换行符和多个空格,必须进行 JSON 转义(\n、多个 \u0020),会大幅增加载荷大小。压缩的 XML 也不太可能触发中间代理或日志系统的行长度限制。
对文本内容转义特殊字符,谨慎使用 CDATA
对于包含 & 或 < 的简短文本值,使用实体引用(&、<)— 它们比 CDATA 节更具可移植性,且在属性值中同样适用。将 CDATA 节()保留用于嵌入大段代码、SQL 查询或 HTML 片段,因为对每个特殊字符进行转义会使内容难以阅读。
尽早声明命名空间
在根元素或使用该前缀的最高层级元素上声明 XML 命名空间(xmlns:prefix="URI")。在文档树深处声明命名空间会降低 XML 的可读性,并可能导致基于流的 XML 解析器(SAX、StAX)在增量处理命名空间时出现问题。上方的 SOAP 信封示例演示了推荐的模式:所有命名空间声明均在根 Envelope 元素上。

常见问题

使用此工具时,我的 XML 数据会被上传到服务器吗?
不会。所有格式化、压缩和验证操作均完全在浏览器中通过 JavaScript 完成。你的 XML 数据不会通过网络传输,不会存储在任何服务器上,也不会被任何人记录或分析。因此,即使 XML 载荷中包含 API 凭证、内部服务数据、财务记录、医疗 HL7/FHIR 文档或其他敏感内容,使用本工具也是安全的。你可以通过打开浏览器的「网络」标签来验证这一点 — 粘贴或处理 XML 时不会触发任何请求。
「验证」按钮会检查什么?
「验证」按钮根据 XML 1.0 规范检查你的 XML 是否格式良好。格式良好意味着:每个开始标签都有对应的结束标签,标签正确嵌套(无重叠元素),文档有且仅有一个根元素,属性值已加引号,以及保留字符(&、<、>)已正确转义为 &、< 和 >。如果 XML 格式良好,将显示绿色的「XML 有效」横幅;如果存在问题,将显示红色错误信息,并指出首个问题所在的行号和列号,便于你直接定位和修复。
验证会检查 XML Schema(XSD)或 DTD 吗?
不会。本工具仅检查格式良好性 — 不会针对 XSD 模式、DTD、RELAX NG 模式或任何其他语法规则进行验证。格式良好性是模式验证的前提条件,但两者属于不同层级的正确性。一个完全格式良好的 XML 文档仍可能违反某个模式(例如缺少必填元素,或数值字段包含字符串)。如需完整的模式验证,可使用 xmllint(命令行工具)、Oxygen XML Editor,或支持模式验证的编程语言 XML 解析器。
「格式化(美化)」和「压缩」有什么区别?
「格式化(美化)」会添加一致的缩进和换行,使 XML 便于人工阅读。每个嵌套元素根据所选空格数(2 或 4)进行缩进,层级结构一目了然。这适用于阅读、编辑或对比 XML 的场景。「压缩」则相反:它去除所有不属于元素文本内容的空白字符,将文档压缩至最少字符数。这适用于将 XML 存入数据库、在字节数敏感的网络传输中发送,或将其嵌入其他格式的字符串时。两种操作生成的 XML 在语义上完全相同 — 仅改变非有效空白字符。
格式化会保留 XML 注释和属性吗?
会。格式化对 XML 内容来说是完全无损的。注释()会原位保留,仅调整周围的空白以适应缩进。所有属性、属性在标签内的顺序及其值均被完整保留。CDATA 节、处理指令()和命名空间声明也均被保留。格式化器只调整元素标签之间的空白 — 绝不修改元素名称、属性名称、属性值、文本内容或注释。
如何使用 4 空格缩进格式化 XML?
点击缩进控件中的「4 空格」单选按钮(位于格式化、压缩和验证按钮旁边),然后点击「格式化」。输出面板将以 4 空格缩进重新渲染 XML。你可以随时切换 2 和 4 空格并再次点击「格式化」— 缩进大小在点击按钮时读取。2 空格缩进是 Web 服务和数据交换格式中最常见的惯例;4 空格缩进有时在企业级 XML 模式和 SOAP 密集型环境中更为常见。
本工具支持哪些 XML 版本和编码?
格式化器使用浏览器内置的 DOMParser,以 text/xml MIME 类型解析,支持任何浏览器可处理的字符编码的 XML 1.0 文档 — 实际上,UTF-8、UTF-16 和 ISO-8859-1 已涵盖几乎所有真实场景中的 XML。XML 声明()在存在时会被保留。对于 XML 1.1 文档(实际很少见,主要用于 Unicode 控制字符),同一解析器同样适用,但部分 XML 1.1 特有功能可能未被完全执行。
什么会导致「格式良好性」错误,如何修复?
最常见的格式良好性错误有:(1) 标签不匹配 — 开始标签如 与结束标签 (注意复数形式)不对应。修复:标签名称必须完全匹配,包括大小写。(2) 未闭合的标签 — 标签没有对应的结束标签或自闭合斜杠。修复:添加结束标签,或改为 。(3) 未转义的特殊字符 — 在文本内容中直接使用 & 而非 &,或使用 < 而非 <。修复:在 CDATA 节外将裸 & 替换为 &,裸 < 替换为 <。(4) 多个根元素 — XML 要求有且仅有一个根元素包裹所有内容。修复:用单个根标签包裹所有内容。本工具的错误信息会包含首个问题的行号和列号。
可以用本工具格式化 XHTML 或 SVG 文件吗?
可以。XHTML 和 SVG 都是有效的 XML 应用,因此本工具能正确地格式化、压缩和验证它们。对于 XHTML,它能捕获 HTML5 解析器会静默忽略但在严格 XHTML 中属于错误的标签不匹配或未闭合标签。对于 SVG,它对格式化 Figma、Illustrator 等工具生成的复杂路径密集型文件特别有用,便于手动检查或编辑元素结构。
本工具如何处理 XML 命名空间?
XML 命名空间(xmlns 声明、命名空间前缀如 soap:、xsi: 等)均被格式化器完整保留。命名空间声明保留在原始声明的元素上,不会被移动或去重。带前缀的元素名称和属性名称被格式化器视为不透明字符串 — 前缀和本地名称均原样保留。上方的 SOAP 信封示例演示了包含三个命名空间前缀的文档。
XML 输入有文件大小限制吗?
本工具没有强制的硬性大小限制,但浏览器基于 DOM 的解析器消耗的内存与文档大小成正比。对于大多数真实场景中的 XML 文件(配置文件、API 响应、RSS Feed、SOAP 载荷),通常远小于 1MB,处理几乎是即时的。对于非常大的 XML 文件(多兆字节的数据导出或日志文件),建议使用命令行工具:在 Linux/macOS 上使用 xmllint --format input.xml(libxml2 的一部分),或使用跨平台方案 python3 -c "import xml.dom.minidom; print(xml.dom.minidom.parse('input.xml').toprettyxml(indent=' '))"。
如何将 XML 转换为 JSON,或将 JSON 转换为 XML?
本工具专注于格式化和验证 XML 结构。如需在 XML 和 JSON 之间转换,请使用配套工具:XML 转 JSON 转换器将 XML 文档转换为 JSON 格式,JSON 转 XML 转换器将 JSON 对象转换为 XML。两个工具同样是 100% 浏览器端运行,不上传任何数据。