如何从命令行漂亮地打印XML?

相关: 如何在(unix)shell脚本中漂亮地打印JSON?

是否有一个(unix)shell脚本来以可读的forms格式化XML?

基本上,我想要它改变以下内容:

<root><foo a="b">lorem</foo><bar value="ipsum" /></root> 

…变成这样的东西:

 <root> <foo a="b">lorem</foo> <bar value="ipsum" /> </root> 

尝试这样做:

 echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xmllint --format - 

该实用程序随libxml2-utils一起提供

要么

 echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xml_pp 

这个命令附带了XML :: Twig perl模块,有时也是xml-twig-tools软件包。

要么

 echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xmlstarlet format --indent-tab 

这个命令附带了xmlstarlet

要么

 echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | tidy -xml -i - 

检查tidy包裹

要么

 echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | python -c 'import sys;import xml.dom.minidom;s=sys.stdin.read();print xml.dom.minidom.parseString(s).toprettyxml()' 

要么

 echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | saxon-lint --indent --xpath '/' - 

检查撒克逊棉绒

要么

  echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | java -cp /usr/share/java/saxon/saxon9he.jar net.sf.saxon.Query \ -s:- -qs:/ '!indent=yes' 

检查撒克逊人,他

xmllint --format yourxmlfile.xml

xmllint是一个命令行XML工具,包含在libxml2http://xmlsoft.org/ )中。

================================================

注意:如果您没有安装libxml2 ,可以通过执行以下操作来安装它:

 cd /tmp wget ftp://xmlsoft.org/libxml2/libxml2-2.8.0.tar.gz tar xzf libxml2-2.8.0.tar.gz cd libxml2-2.8.0/ ./configure make sudo make install cd 

要在MacOS上用Homebrew安装它,只需要: brew install libxml2

您也可以使用整洁 ,可能需要先安装(例如在Ubuntu上:sudo apt-get install tidy )。

为此,您可以执行以下操作:

 tidy -xml -i your-file.xml > output.xml 

注意:有许多额外的可读性标志,但是自动换行的行为有一点让人纠结( http://tidy.sourceforge.net/docs/quickref.html )。

要在Debian系统上使用xmllint ,您需要安装libxml2-utils软件包( libxml2不提供此工具,至less在Debian 5.0“Lenny”和6.0“Squeeze”上不提供此工具)。

你没有提到一个文件,所以我假设你想在命令行上提供XMLstring作为标准input。 在这种情况下,请执行以下操作:

 $ echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xmllint --format -