有没有针对Linux的CLI工具可以格式化XML文件,并保留任何空行和注释?我尝试过xmllint、tidy和xmlstarlet,但它们似乎都专注于彻底清理XML文件,而不仅仅是缩进和间距。
最佳答案
尝试xmlindent
。它有几个选项,如-nbe
和-nba
以及其他配置前后空间处理的选项。
给定XML输入
<?xml version="1.0"?>
<Response>
<TroubleResponse>
<Check>
<DStatus>
<GID>123456789</GID>
<FLAG/>
</DStatus>
</Check>
<RAM>
<Details>
<RAMID>5555777788
</RAMID>
</Details>
</RAM>
<RAM>
<Details>
<RAMID>
5555777788</RAMID>
</Details>
</RAM>
</TroubleResponse>
</Response>
输出可以配置以下选项(摘录):
-t Use tabs instead of spaces
-nas Suppress newline after start-tag
-nae Suppress newline after end-tag
-nbs Suppress newline before start-tag
-nbe Suppress newline before end-tag
-f Force newline on elements without children
因此
xmlindent -f
和xmlindent -nba
将产生以下输出:<?xml version="1.0"?>
<Response>
<TroubleResponse>
<Check>
<DStatus>
<GID>123456789 <!-- Change -->
</GID>
<FLAG/>
</DStatus>
</Check>
<RAM>
<Details>
<RAMID>5555777788
</RAMID>
</Details>
</RAM>
<RAM>
<Details>
<RAMID> <!-- Change -->
5555777788
</RAMID>
</Details>
</RAM>
</TroubleResponse>
</Response>
xmlindent -nbe
将产生以下输出:<?xml version="1.0"?>
<Response>
<TroubleResponse>
<Check>
<DStatus>
<GID>123456789</GID>
<FLAG/>
</DStatus>
</Check>
<RAM>
<Details>
<RAMID>5555777788
</RAMID>
</Details>
</RAM>
<RAM>
<Details>
<RAMID> <!-- Change -->
5555777788</RAMID>
</Details>
</RAM>
</TroubleResponse>
</Response>
xmlindent
并不完美,因为它似乎并不总是实现预期的结果,但它可以进行一些配置。