格式化XML
把挤成一团的XML缩进成易读的结构,也可以再压缩回去。注释、CDATA段和命名空间完整保留。不存储任何内容。
- 绝不存储
- 无需排队,无需等待
- 无需注册,无水印
格式化后的XML会显示在这里。
使用方法
粘贴XML
也可以拖入.xml、.svg、.rss或.xsd文件。文件绝不会被存储。
选择缩进
两个空格、四个空格、制表符,或压缩成一行。
复制或下载
如果XML有错误,您会看到出错的行号和列号,而不是结果。
为什么重新缩进XML比看上去更有风险
XML中的空白默认是有意义的,这正是最容易让人栽跟头的地方。JSON的格式怎么改都无所谓,XML解析器却必须把元素之间的空格和换行当作文本内容报告出来——只有schema(如果有的话)才能声明它们可以忽略。所以重新缩进确实会改变文档。对大多数配置文件和数据文件来说这无关紧要,但对于混合内容的文档——文本和元素并排出现,比如XHTML或DocBook——它可能改变文档所表达的内容。
因此,这里的格式化会避开必须原样保留的部分。带有xml:space="preserve"的元素,其内容完全按原样保留,因为这个属性的存在就是为了声明这一点。CDATA段原封不动地保留;它们本来就是用来存放不能被解析的文本,在其中重新排版会把内容破坏。实体引用保持为引用,而不会展开成它们所代表的字符。
命名空间完全按原样保留——前缀、声明以及它们所绑定的元素都不变。这听起来理所当然,其实不然:有些格式化工具会统一前缀,或把声明移到它认为该放的位置,生成的文档在技术上等价,却会在按字面前缀匹配的工具里出错。属性顺序也同样保留,尽管XML认为顺序没有意义,原因相同——能与上一版本直接比对差异,比整齐更有价值。
格式化时检查的是格式良好性:每个标签都已闭合、嵌套正确、只有一个根元素、字符合法、&符号和尖括号都已正确转义。这是XML两道门槛中较低的一道。一个文档可以完全格式良好,却仍然不符合约束它的DTD或schema,而这一点再怎么格式化也看不出来。
如果您需要的是别的
xmllint --format in.xml在命令行中完成同样的工作,大多数Unix系统都已预装;xmlstarlet fo --indent-tab对缩进本身提供更多控制。两者都能处理远超网页内存容量的大文件。
如果文档需要比对、签名或以规范形式存储,格式化根本就是错误的操作。规范化XML(Canonical XML)——xmllint --c14n——会生成唯一的规范形式,两个等价文档都会归约为它,XML数字签名正是依赖于此。美化一个已签名的文档会破坏它的签名,这是学会这一课代价最高的方式。
常见问题
我的XML会被存储吗?
不会。没有服务器调用,没有日志记录,不存储任何内容。页面加载完成后,您甚至可以断开网络,它照样能用。这一点在这里比看上去更重要:人们粘贴到在线格式化工具里的,往往是API响应、配置文件和错误信息,而这些内容经常包含令牌、客户记录和内部主机名。
格式化后哪些内容会保留?
注释、CDATA段、处理指令、XML声明以及所有命名空间前缀。属性顺序按原样保留。只包含文本的元素保持在一行,因为把<title>Hello</title>拆成三行并不会更美观——而在混合内容文档中,这样做会改变文本实际表达的内容。
缩进会改变XML的含义吗?
如果元素里只包含其他元素,不会。但XML并没有“空白无意义”的通用规则——在文本和元素并排出现的混合内容中,新增的空白就是文本的一部分。所以这里不会拆分只包含文本的元素,而是让它们保持在一行。如果您的文档确实含有混合内容且空白很重要,压缩是更安全的操作。
能用于HTML吗?
只有当HTML同时是格式良好的XML时才行——而大多数实际的HTML都不是。未闭合的<br>、<img>和<li>标签、没有引号的属性值和单独的&符号,在HTML中都合法,在XML中都不合法。这里使用的是严格的XML解析器,它会把这些报告为错误,而不是去猜测。XHTML和SVG都能完美格式化。
SVG可以吗?
可以——SVG就是XML,用它来阅读压缩过的SVG非常合适。路径、渐变和内嵌样式都原样保留,变动的只有元素之间的空白。
有大小限制吗?
取决于可用内存,而不是我们设定的上限。几MB的文档瞬间就能格式化;超大文档受限于能一次载入多少内容,而不是我们这边的任何限制。
小贴士: 只检查格式是否良好。会检查标签是否配对、嵌套是否正确、字符是否合法,并重新缩进——但不会获取或应用DTD、XSD,因此一个文件可以顺利格式化,却仍然不符合它的schema。命名空间完全按原样保留。
把这个工具放到您的网站上
博客、课程页面或帮助文章均可免费使用。粘贴一段代码,访客就能直接在您的页面上使用。