XML 格式化与压缩器,免费
粘贴 XML 以即时进行格式化、美化或压缩。
使用方法
- 在输入区粘贴您的 XML。
- 点击格式化美化或压缩压缩。
- 复制或下载结果。
常见问题
如果我的 XML 有错误会怎么样?
工具使用浏览器内置的 DOMParser 校验您的 XML。语法错误会在输出上方的红框中显示。
它支持 CDATA 段、注释和处理指令吗?
支持。格式化器保留所有类型的 XML 节点,包括 CDATA 段、注释和处理指令。
有大小限制吗?
没有硬性限制 · 取决于您浏览器的内存。多 MB 的 XML 文件通常能即时格式化。
XML实用指南
XML 1.0于1998年2月10日成为W3C推荐标准,由Tim Bray、Jean Paoli和C. M. Sperberg-McQueen编辑,工作组由Sun公司的Jon Bosak主持。Tim Bray在发布时的一句话概括了设计意图:「XML是可扩展的、国际化的、健壮的、简洁的,并为Web而生。」当前的权威版本是第五版,发布于2008年11月26日,由Bray、Paoli、Sperberg-McQueen、Eve Maler和François Yergeau编辑。XML直接源自SGML(ISO 8879:1986),SGML是一种更庞大、更难实现的文档格式,XML从中去除了大部分鲜少使用的部分,同时保留了文档模型。
XML在2026年仍活跃的领域
JSON已主导REST API载荷超过十年,但XML在任何需要模式严格性、文档语义或既有标准约束的地方依然根深蒂固。了解您日常会在哪里遇到它,是掌握一个好格式化工具价值的一半:
- Office文档格式:Microsoft的
.docx/.xlsx/.pptx是充满XML部件的zip压缩包,标准化为ECMA-376和ISO/IEC 29500。OpenDocument的.odt/.ods/.odp(ISO/IEC 26300)遵循相同模式。EPUB电子书同样以XML打包。 - Web词汇:SVG(矢量图形)、MathML(数学符号)、Atom订阅源、RSS 2.0,以及Google和Bing用于爬取调度的
sitemap.xml协议。 - SOAP与企业消息传递:银行、电信、保险和政府后端仍暴露SOAP端点,通常隐藏在REST外观之后。基于XML的行业标准包括:金融衍生品的FpML、SEC申报的XBRL、保险行业的ACORD,以及支付消息的ISO 20022。
- 构建和配置文件:Maven的
pom.xml、遗留Spring beans、所有Android资源文件(AndroidManifest.xml、res/values/strings.xml、res/layout/*.xml),以及Apple的Info.plistXML变体。 - 垂直领域数据交换:Google Earth的KML、GPS轨迹的GPX、乐谱的MusicXML(2021年发布4.0版)、本地化的XLIFF(2024年7月标准化为ISO 21720的2.1版),以及临床文档的HL7 v3 / CDA。
格式良好与有效:两者并不相同
XML使用两种不同的规范级别,两者很容易混淆:
- 格式良好意味着文档遵守XML的语法规则:恰好一个根元素,所有标签平衡且正确嵌套,属性值加引号,实体引用以分号结尾,文本内容中没有未转义的
<或&。 - 有效意味着格式良好的文档还符合已声明的DTD、XSD(XML Schema 1.1)、RELAX NG或Schematron模式,正确的元素位于正确的位置,属性值类型正确,基数正确。
本格式化工具仅检查格式良好性。浏览器内置的 DOMParser 通过一个 parsererror 元素报告遇到的首个解析错误,工具将其显示在红色错误框中。针对模式的有效性验证需要不同的工具(XSD用Saxon、libxml2的 xmllint --schema、W3C验证服务等)。
五个预定义实体引用
根据W3C XML 1.0 §4.6,「格式良好的文档无需声明以下任何实体」:amp、lt、gt、apos、quot。结尾分号是强制性的;与某些HTML用法不同,XML永远不接受 & 后面不加 ; 的写法。
| 实体 | 字符 | 适用场景 |
|---|---|---|
< | < | 在元素内容中始终需要(否则会开始一个标签) |
& | & | 始终需要(否则会开始一个实体引用) |
> | > | 在内容中出现 ]]> 序列时是必需的;在其他地方推荐使用以保持对称 |
' | ' | 在以单引号分隔的属性值内 |
" | " | 在以双引号分隔的属性值内 |
CDATA节、注释和处理指令
任何对XML进行格式化的人最终都会遇到的三种特殊语法特性:
- CDATA节:
<![CDATA[ … ]]>块让您无需转义<和&就能嵌入任意文本。CDATA内唯一不能包含的序列是字面结束分隔符]]>。适用于在XML文档中嵌入代码示例、正则表达式或HTML片段。 - 注释:
<!-- … -->。字符串--在注释内是非法的。 - 处理指令:
<?target …?>。XML声明本身在技术上不是处理指令,但大多数工具以相同方式处理它:<?xml version="1.0" encoding="UTF-8"?>是推荐的第一行。
命名空间
XML的命名空间机制允许多种词汇在单个文档中共存:Atom加自定义扩展、SOAP加WS-Security标头、OOXML的主文档部件引用来自其他命名空间的关系、绘图和图片。语法是默认命名空间用 xmlns="…",前缀命名空间用 xmlns:prefix="…",格式化工具保留两者不变。命名空间URI是标识符,不是URL,不必解析为任何内容。
两个著名的XML安全陷阱
十亿笑声攻击。一个带有递归展开实体的小型XML文件,可在解析器内存中膨胀到数十亿个字符:
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!-- … nine more layers later, the document expands to 10^9 lols -->
现代解析器通过限制实体展开来防御此攻击。XXE(XML外部实体)攻击利用解析外部实体的解析器来读取本地文件(<!ENTITY xxe SYSTEM "file:///etc/passwd">)或触发来自服务器的SSRF请求。OWASP的XXE预防备忘单措辞明确:「始终完全禁用DTD(外部实体)是防止XXE的最安全方式。」这正是浏览器的 DOMParser 所做的:它完全忽略DOCTYPE实体声明,这也是为什么这个客户端格式化工具可以安全地处理不可信XML。
美化格式与压缩
- 格式化/美化会缩进嵌套元素,将开闭标签各放一行,生成的输出更易于阅读,但通常比压缩版本大30-50%。适用于调试、审阅差异或学习不熟悉的模式时。
- 压缩删除元素之间的所有空白,同时保留文本内容中的空白(XML默认将元素内容中的空白定义为有意义的,除非被
xml:space="default"覆盖)。用于生产载荷以及任何需要优化传输字节数的场景。
当空白真正重要时(例如文档中嵌入的原始代码),xml:space 属性是您的应急出口。在祖先元素上设置 xml:space="preserve",符合规范的处理器将逐字节保留后代中的每个空格和换行符。
格式化工具能捕获的常见XML错误
- 文本内容中存在未转义的
&。和号在文本中始终无效;请使用&。 - 标签不匹配或未闭合。最常见的解析错误。每个
<tag>都需要一个对应的</tag>(或使用自闭合形式<tag/>)。 - 多个根元素。XML文档必须恰好有一个最外层元素。如果顶层有两个同级元素,请用一个父元素将它们包裹。
- 编码不匹配。
<?xml version="1.0" encoding="UTF-8"?>声明必须与文件的实际字节编码匹配。带UTF-8声明的UTF-16 BOM是此类错误的典型案例。 - 属性值中包含保留字符。
<tag attr="a<b">是无效的,即使<在引号内看似无害。 - XML声明前有杂散BOM。某些文本编辑器会静默插入UTF-8 BOM,这会使严格解析器出错。
xml:space="preserve"区域内的混合行尾。不一致的CR / LF / CRLF在跨平台往返时会产生可见的空白差异。
更多常见问题
为何我的XML格式化后没有输出?
最常见的原因是输入格式不良好。输出上方的错误框显示浏览器 DOMParser 遇到的首个解析错误,通常是标签缺失或不匹配、未转义的 &,或缺少根元素。修复错误后重新运行。
我的XML会上传到服务器吗?
不会。格式化和压缩均在浏览器内置的 DOMParser 和一个小型JavaScript序列化器中运行。您的XML不会离开页面,这对包含凭据、内部URL或敏感客户数据的SOAP载荷、配置文件等内容至关重要。
该工具能否根据XSD或DTD模式验证?
不能。模式验证需要加载模式文件并解析其引用,这与浏览器执行的格式良好性检查是不同的问题。XSD验证请在命令行使用Saxon或 xmllint --schema,或W3C XML模式验证服务。
XML在2026年还相关吗,还是应该直接用JSON?
取决于您的使用场景。对于新的REST API,JSON几乎总是正确的选择。但XML仍然是Office文档(.docx、.xlsx)、企业消息传递(SOAP、金融标准)、Android资源文件、EPUB、RSS / Atom、SVG以及大多数受监管行业数据交换的默认格式。掌握XML的阅读、格式化和验证仍是基础技能;只是它不像JSON那样是每天的首选工具。
「保留所有节点类型」对格式化工具意味着什么?
CDATA节、注释和处理指令均保持与输入中完全相同的形式,格式化工具仅更改元素之间的空白。因此,<![CDATA[ if (a < b) { … } ]]> 块能逐字节往返,即使其内容包含通常需要转义的 < 字符。