我承认这是标准的转换方式<tag></tag>
,<tag/>
但客户希望采用前一种布局,而不是后一种。我查看了各种选项,xmllint
但不知道需要什么。
或者,除此之外还有什么其他东西xmllint
可以使用吗?
答案1
xmllint
有可用于生成所需输出的选项。来自帮助:
--c14n : save in W3C canonical format v1.0 (with comments) --c14n11 : save in W3C canonical format v1.1 (with comments) --exc-c14n : save in W3C exclusive canonical format (with comments)
使用其中任何一个都可以
xmllint --c14n test.xml
不幸的是,在一次调用中组合多个格式化选项xmllint
似乎不起作用,因此如果您还想使用--format
重新xmllint
格式化/重新缩进输出,则需要将第一次xmllint
调用的输出通过管道传输到第二次调用。执行此操作时,似乎xmllint
需要将-
stdin 重定向到命令的末尾。
例子:
对于test.xml
作为
<?xml version="1.0" encoding="UTF-8"?>
<outer><inner/></outer>
命令
xmllint --format test.xml | xmllint --c14n -
产生输出
<outer>
<inner></inner>
</outer>
笔记:
- 由于该
--format
选项将再次折叠展开的空标签,因此管道中选项的顺序很重要 - 上述选项删除xml 声明/ 在输出的第一行省略它