§

粘贴 XML

§

选项

模式
缩进
XML 声明
自闭合空元素标签
§

格式化输出

xml

在国内技术栈里,XML 美化打印仍是日常工具:微博、今日头条与各大门户的 RSS feed 需要排版良好才便于第三方聚合;阿里巴巴 1688 平台的 SOAP B2B 接口、中国电子发票(国家税务总局推行的 XML 电子发票格式)以及 GB/T 国家标准里的 XML 模式,都依赖严格缩进的 envelope;中国证监会、上交所与深交所要求上市公司提交的 XBRL 财报文件本质上就是 XML;百度地图开放平台早期接口仍以 XML 返回 POI 数据;国家测绘地理信息局发布的 SVG/XML 矢量地图同样需要清晰可读的层级,本地工具便于在不出网的环境下复核。

什么是 XML 格式化?

XML(Extensible Markup Language,可扩展标记语言)是 W3C 标准化的结构化文档与数据交换文本格式。格式化——也叫美化打印或 beautify——读入格式良好的 XML 源码并重新缩进,让每个元素、属性、注释、处理指令和 CDATA 节都便于扫读。解析得到的文档树完全保持不变,只有元素之间的空白发生变化。

XML 格式化是如何工作的?

你的输入完全在浏览器中处理,使用原生的 DOMParserXMLSerializer API,再加上一个自定义的递归缩进器。主要步骤如下:

  1. 你的输入按字节从文本框读取——粘贴进去的每一个字节都只保存在本地内存中。
  2. 浏览器使用 new DOMParser().parseFromString(text, 'application/xml') 解析它。如果输入不是格式良好的 XML,解析器会插入一个 <parsererror> 节点,其文本内容里携带引擎给出的行号与列号——这些信息会原样显示在错误条中。
  3. 解析成功后,自定义缩进器深度优先地遍历 DOM 树,把每个元素、属性集合、CDATA 节、注释和处理指令按当前深度各占一行输出。如果开启了相关选项,空元素会以自闭合形式呈现。
  4. 压缩模式则反转该流水线:XMLSerializer().serializeToString(doc) 输出单行形式,再用一条带护栏的正则去掉元素之间的空白,同时不影响 CDATA 块内或非空白文本节点中的内容。
  5. 结果写入只读文本框,错误条会被清空,下载按钮则将结果打包为可发送或附在工单上的 .xml 文件。

为什么使用此工具美化 XML?

  • 隐私:每一次解析、格式化与压缩都在你的浏览器中完成。XML 永远不会进入我们的服务器——没有上传、没有遥测、无需账户。
  • 精准的错误:当输入不合规时,解析器会原样展示浏览器引擎自己报告的行号和列号,而不是猜测——和你在 DevTools 中看到的一致。
  • 忠实往返:先格式化再压缩,你会得到与原文档字节等价的结果(仅受 XML 声明选项影响)——格式化不会重新归一命名空间,也不会改写属性顺序。
  • 速度快:纯 DOMParser 加约 60 行的缩进器即可瞬间处理多 MB 的 SOAP 信封和 OOXML 片段,无需下载任何外部库。

XML 格式化有哪些常见应用?

XML 美化打印在 Web 发布、企业集成与数据归档中随处可见:

  • RSS / Atom feed 检查:粘贴播客或新闻 feed 的内容,发布前确认 channel 元数据、item 顺序和命名空间前缀。
  • SOAP 调试:把从 Wireshark 或 SOAP 客户端日志中复制的 envelope 格式化,让 Header、Body 和 Fault 一眼可见。
  • Sitemap 审计:重新缩进从竞品或自家预发布抓来的 sitemap.xml,统计条目数并核对每个 URL 的 hreflang 备选。

XML 格式化示例长什么样?

把三个元素的 <feed><entry><title>Hello</title></entry></feed> 粘贴进来,选择 2 空格缩进并按下 格式化,得到的是一份四行文档,每个元素各占一行并按深度缩进。对同一输入切换到 Minify 即可重新折回原始字节串。任何格式良好的文档都能无损往返。

可以离线运行吗?

可以。格式化与压缩流水线是纯 DOMParser + XMLSerializer 加上一个极小的递归缩进器,全部在浏览器标签页内运行。任何内容都不会上传,没有 Service Worker 代理你的输入,格式化步骤本身不会发起任何网络请求。唯一对外流量是标准的页面资源(CSS、字体、统计脚本)——你的 XML 永远不会到达 Ultim8Soft。

格式化会改变文档吗?

不会发生语义变化。格式化只重写元素之间的空白。元素名、属性值、文本内容、CDATA 负载、注释和处理指令都按字节保留。命名空间声明与前缀完全沿用输入——格式化器不会重新归一或重排属性。除可选的 XML 声明开关外,输出与输入解析出的 DOM 树完全一致。

CDATA / 注释 / 处理指令如何处理?

三者都按当前缩进深度原样输出在各自一行上。CDATA 负载被包裹在 <![CDATA[…]]> 中,内部不进行任何重新缩进——规范规定 CDATA 内容是不透明的,因此格式化器从不触碰。注释使用 <!-- … -->,处理指令使用 <?target data?>。三类节点经历 格式化 → 压缩 → 格式化 的往返后内容完全保留。

格式化与压缩 XML 有什么区别?

格式化把空白展开,便于人眼阅读文档树;压缩则把空白剥掉,便于传输与存储。两者都作用在解析后的 DOM 上,而非原始字节串,因此对一份格式良好的文档执行 格式化 → 压缩 的往返,会得到与原始压缩形式字节等价的结果。需要阅读或 diff XML 时用格式化;需要通过计费的 API 网关传输或嵌入另一份文档时用压缩。

本 XML 格式化器使用与浏览器处理 AJAX XHR 响应和 SVG 文档相同的解析器,因此任何格式良好的 XML——RSS、Atom、SOAP、sitemap、OOXML、SVG——都能干净往返。在上方粘贴任意 XML,复制结果,或将其下载为 .xml