如何从命令行漂亮地打印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工具,包含在libxml2
( http://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 -