用于格式化 XML 文件的 CLI 工具,保留空行和注释
CLI tool to format XML files keeping empty lines and comments
是否有适用于 Linux 格式 XML 文件保留任何空行和注释的任何 CLI 工具?我已经尝试了 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
并不完美,因为它似乎并不总能实现预期的结果,但可以进行一些配置。
是否有适用于 Linux 格式 XML 文件保留任何空行和注释的任何 CLI 工具?我已经尝试了 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
并不完美,因为它似乎并不总能实现预期的结果,但可以进行一些配置。