Warm tip: This article is reproduced from serverfault.com, please click

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

(unix - How to pretty print XML from the command line?)

发布于 2013-04-18 18:50:04

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

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

基本上,我希望它可以转换以下内容:

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

...变成这样的东西:

<root>
    <foo a="b">lorem</foo>
    <bar value="ipsum" />
</root>
Questioner
svidgen
Viewed
0
2,839 2019-01-21 20:49:53

libxml2-utils

该实用程序附带libxml2-utils

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

Perl的 XML::Twig

该命令附带XML :: Twig 模块,有时xml-twig-tools打包:

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

xmlstarlet

该命令附带xmlstarlet

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

tidy

检查tidy包装:

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

Python

Pythonxml.dom.minidom可以格式化XML(python2和python3):

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())'

saxon-lint

你需要saxon-lint

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

saxon-HE

你需要saxon-HE

 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'