跳到主要内容
Tooletto

XML 压缩工具

XML 格式化工具 的预设方案

通过去除元素之间的空白,把 XML 压缩成一行。适合把文档嵌入请求体或配置值,这些场合下缩进只是多余的负担。

  • 文件永不离开你的设备
  • 免费,无需注册
  • 无水印
  • 加载后可离线使用
Loading tool…

如何XML 格式化工具

  1. 1

    粘贴你的 XML

    一份压缩过的 feed、一份配置文件、一个 SOAP 响应——什么都可以。

  2. 2

    格式化或压缩

    为了阅读而缩进,或者为了传输而压缩。

  3. 3

    检查错误

    不匹配和未闭合的标签会被明确指出。

压缩后的 XML 实际会用在哪里

XML 出现在不少传输体积比人类可读性更重要的场合——服务之间反复发送的 SOAP 请求体、存储在有长度限制的环境变量里的配置值、被自动化客户端频繁抓取的 feed。去除元素之间的空白,同时小心保留 CDATA 区块、注释和属性值的原样内容,能去掉格式化带来的开销,而不触碰这些特殊区块刻意保护的任何数据——这和这个解析器在反方向做格式化时提供的安全保证是一样的。

压缩不会触碰数据,只会触碰格式

和这个格式化工具的解析保证一样,这里的压缩永远只去除元素标签之间的空白——它不会重新排列元素、不会重写属性值,也不会改变任何一个解析这份 XML 的程序实际会读取的内容。用这种方式压缩后的文档,和为可读性而格式化的文档,对任何以编程方式消费它的东西来说,代表的是完全相同的数据;不同的只是字节大小和人类可读性。

元素内部的空白会被保留,而不只是外部的

两个兄弟元素之间的空白——纯粹为了方便人类阅读而存在的缩进——会被去除。而直接存在于一个承载文本的元素内部、作为实际内容的空白,比如存储为元素文本的一句话里刻意留出的一个空格,则会被保留而不是剥离,因为 XML 没有像 HTML 那样普遍适用的规则,认定元素内容里的空白是无关紧要的。正确处理这个区别,正是一个专门构建的解析器能做对、而一个"直接去掉所有空白"的笼统方案会破坏真实文本内容的原因所在。

常见问题

它会校验我的 XML 吗?

它会检查标签是否配对、是否正确嵌套,并在出问题时指出具体是哪个标签。它不会对照 DTD 或 XSD schema 做校验——那需要 schema 文件本身,是另一项工作。

CDATA 区块和注释会被保留吗?

会被原样精确保留。扫描器会在寻找标签之前,先识别出 `<![CDATA[…]]>`、注释、处理指令和 DOCTYPE 声明,所以它们内部的标记永远不会被误认为是结构——而这正是基于正则表达式的格式化工具容易破坏文件的地方。

包含 < 或 > 的属性怎么处理?

能正确处理。扫描器在读取一个标签时会跟踪引号状态,所以像 `note="a > b"` 这样的属性不会让标签提前结束。这是简单格式化工具的一个常见故障。

能用它处理 HTML 吗?

对于严格的 XHTML 可以。真实世界的 HTML 有像 `<br>`、`<img>` 这样永远不闭合的空元素,还有可以省略的闭合标签,所以处理 HTML 应该用专门的 HTML 格式化工具——它使用真正的 HTML 解析器。