在线 XML 格式化工具
在浏览器中美化、压缩和验证 XML — 数据不离开设备。重新缩进杂乱的 XML,并报告格式错误的行列位置。免费、隐私保护,无需注册。
什么是 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
粘贴 XML 数据
在上方输入框中输入或粘贴 XML 数据。也可以点击「加载示例」试用示例(一个格式化效果良好的压缩产品目录 XML)。
- 2
选择操作
点击「格式化」以带缩进的方式美化 XML,点击「压缩」以去除空白字符,或点击「验证」以检查格式良好性。格式化前请选择 2 或 4 空格的缩进大小。
- 3
复制输出结果
处理后的 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 > 10 & stock > 0</query>
属性值未加引号或引号使用不当
所有 XML 属性值必须用单引号或双引号括起来。未加引号的属性值在 HTML5 中有效,但在 XML 中属于格式良好性错误。此外,如果属性值本身包含双引号,则必须使用单引号作为分隔符(或将引号转义为 ")。
<product id=p01 label="It's a "widget"">
<product id="p01" label="It's a "widget"">
多个根元素
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 数据会被上传到服务器吗?
「验证」按钮会检查什么?
验证会检查 XML Schema(XSD)或 DTD 吗?
「格式化(美化)」和「压缩」有什么区别?
格式化会保留 XML 注释和属性吗?
如何使用 4 空格缩进格式化 XML?
本工具支持哪些 XML 版本和编码?
什么会导致「格式良好性」错误,如何修复?
可以用本工具格式化 XHTML 或 SVG 文件吗?
本工具如何处理 XML 命名空间?
XML 输入有文件大小限制吗?
如何将 XML 转换为 JSON,或将 JSON 转换为 XML?
相关工具
查看所有工具 →Base64 解码与编码工具
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
CSV 转 JSON 转换器
编码和格式化
在浏览器中将 CSV 转换为 JSON。支持 RFC 4180、类型推断、表头行、大整数安全。100% 隐私,无需上传。
JSON Diff 对比
编码和格式化
在浏览器中即时对比两份 JSON。Side-by-Side 高亮 + RFC 6902 JSON Patch 输出,一键忽略 timestamps、IDs 等噪音字段。100% 隐私保护,零上传。
JSON 格式化与验证工具
编码和格式化
在浏览器中即时格式化、验证和美化 JSON。免费在线工具,支持语法验证、错误检测、压缩和一键复制,100% 隐私保护。
JSON Schema 验证器
编码和格式化
在浏览器中即时校验 JSON 是否符合任意 JSON Schema。支持 Draft 2020-12、2019-09 与 Draft-07,错误信息精确定位到 JSON Pointer 路径。100% 隐私保护,零上传、零账号、永久免费。
JSON 转 CSV 转换器
编码和格式化
在浏览器中将 JSON 转换为 CSV。支持 RFC 4180、Excel-EU、TSV、Pipe 预设。可展平嵌套或字符串化。100% 隐私,无需上传。