是否有用于Linux的CLI工具,用于格式化XML文件并保留任何空行和注释?我已经尝试过xmllint,tidy和xmlstarlet,但是它们似乎都集中在完全清除XML文件上,而不仅仅是缩进和间隔。
答案 0 :(得分:2)
尝试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
并不完美,因为它似乎并不总是能够实现预期的结果,但是可以对其进行一些配置。