XML格式化

这个工具做什么

把挤成一行的 XML 排成带缩进, 带语法高亮的结构, 方便肉眼看层级. 它不改变标签, 属性和文本内容, 只重排空白.

输入: <root attr="1"><item>hello</item><empty/></root>
输出:
<?xml version="1.0" encoding="utf8"?>
<root attr="1">
    <item>hello</item>
    <empty/>
</root>

怎么用

  1. 把 XML 粘进文本框(带不带 <?xml ... ?> 声明, 带换行都可以);
  2. 点"格式化", 结果出现在下方; 点"复制"取走;
  3. 标签页可以开多个, 新增, 关闭, 双击改名, 每页各留一份输入和结果, "备注"写这份报文是什么.

什么情况会用到

  • 对接老系统时收到的 SOAP 报文, 银行/政务接口返回的一长串 XML, 需要先看清层级;
  • 日志里打出来的 XML(往往连换行都被吃掉)排查字段值到底对不对;
  • Maven 的 pom.xml, Android 布局文件, Office 配置片段贴出来给人看之前先排版;
  • 判断"字段是不是少了一层父节点"这类问题, 靠缩进比靠肉眼扫一行字符快得多.

它做了哪些处理

  • 每个元素独占一行, 子元素按 4 空格缩进;
  • 没有子元素的 <empty/> 保持自闭合写法, 不会被展开成一对标签;
  • 属性, 命名空间前缀(ns:item, xmlns:ns="...")原样保留在同一行;
  • 文本节点里的转义实体(如 &lt;b&gt;)不会被解开或二次转义;
  • 输出头部会补一行 <?xml version="1.0" encoding="utf8"?> 声明.

常见问题

为什么我原来的 encoding 被改成了 utf8?

工具统一按自己的声明输出, 会覆盖你输入里的版本号和编码. 这里有两点要注意: ① 严格讲 XML 规范里的合法写法是 utf-8, utf8 是 Java 等解析器普遍接受的别名, 但如果这份 XML 要交给严格的校验器或写进标准配置文件, 复制走之后手工改成 encoding="UTF-8"; ② 声明里的编码只是"这段字节用什么编码"的承诺, 改声明并不会转换你的文本编码, 真要转编码得用 iconv 之类的工具.

提示"格式化异常"是什么原因?

本质是解析失败, 最常见的三类: ① 标签没闭合或引号缺失(例如 <a><b>1</b> 少了根节点的闭合); ② 内容根本不是 XML, 或者粘的是一串 JSON; ③ 复制时被截断, 末尾缺了闭合标签 -- 日志和接口返回被截断时最容易这样. 逐层检查闭合标签, 或者先用编辑器把缺失的尾部补齐再试.

能不能一次处理多个根节点/一段里混了别的内容?

不能. XML 文档只允许一个根元素, 一段文本里出现两个并列根节点, 或前后带日志前缀都会解析失败. 正确做法是把报文本体单独摘出来, 必要时临时套一层 <root>...</root>.

和"XML 转 JSON"有什么区别?

本页只排版, 不改变数据形态, 看完还得靠人读结构; XML 转 JSON 是把 XML 转成 JSON 对象, 方便程序处理或字段比对. 转换是有损的: 同名元素会变数组, 纯文本元素的属性会被丢弃, 所以"看清楚原报文"这件事还得用格式化.

报文会被上传吗?

会 -- 解析在服务端完成, XML 内容作为请求参数发送到接口, 只用于这一次排版, 页面没有账号体系也不会展示给其他访问者. 含账号, 身份证, 卡号, 密钥的报文请先脱敏再粘.

相关工具