XML 格式化

粘贴 XML 就自动排版,文本和属性一个字符都不改。

怎么用

  1. 把 XML 粘进输入框——随输入自动排版,不用点按钮。
  2. 选「格式化」或「压缩」,再选 2 或 4 空格缩进;结果立刻更新。
  3. 结构写错时,提示会给出第几行第几列和具体原因;结果可一键复制或下载为 .xml 文件。

示例

输入

<!-- 订单导出:保留原文与属性顺序 -->
<订单 编号="A-1042">
<客户><姓名>张伟</姓名><城市>杭州</城市></客户>
<备注>请在周五之前发货 &amp; 通知仓库。</备注>
</订单>

输出

<!-- 订单导出:保留原文与属性顺序 -->
<订单 编号="A-1042">
  <客户>
    <姓名>张伟</姓名>
    <城市>杭州</城市>
  </客户>
  <备注>请在周五之前发货 &amp; 通知仓库。</备注>
</订单>

默认只做格式化:一层一行、每层 2 空格。属性顺序与引号原样保留,<姓名> 里的文本一个字符都没动,&amp; 也不会被展开成 &。

规则、局限与已知问题

  • 只做结构检查:标签配对、属性引号/重复/分隔、元素名与属性名、实体语法。不做 DTD / XSD 校验,不解析实体声明,不检查命名空间前缀是否已声明。
  • 只改结构空白:属性之间的空白、以及「元素里只含空白」的那段空白。属性顺序、引号风格、属性值、实体写法、注释、CDATA、DOCTYPE 内部子集都逐字符保留。
  • 混合内容不重新缩进:<p>Hi <b>there</b>!</p> 会保持原样空白,因为插入换行就等于改动文本。xml:space="preserve" 的子树整段原样输出。
  • 空元素保持你的写法:<a></a> 不会折叠成 <a/>,<a/> 也不会展开;属性不排序、引号不统一。
  • 压缩只删结构空白:文本里的空白、注释、CDATA 与 DOCTYPE 都保留,不从你的内容里删任何东西。
  • 输入末尾的未闭合标签/注释/CDATA/DOCTYPE 只给提示、不算错误——仍然出结果,这是实时输入的正常状态。真正写错(标签不匹配、属性值没引号、单独的 &)才报错并给行列。
  • 片段(多个顶层元素、或根元素之外还有文本)会按片段排版并提示;完全没有元素则报错。
  • 行列号按 Unicode 码点计,emoji 记 1 列;只有空格、Tab、换行、回车算空白,文本里的全角空格 U+3000 与不换行空格 U+00A0 属于内容,永远不会被删掉。
  • 不支持 HTML:省略 </li>、<br> 这类写法会如实报未闭合/不匹配。不提供文件上传、URL 传参、历史记录、树视图、XML→JSON。不上传、不保存。
  • 超过 20 万字符时,结果会在停止输入约 0.6 秒后更新;不截断文本。输出使用 LF、无末尾换行;排版是幂等的(把结果再排一次不会变化)。

结构排清楚之后,通常还会用到这些。