小编典典

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

all

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

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

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

…变成这样的东西:

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

阅读 100

收藏
2022-03-04

共1个答案

小编典典

xmllint

该实用程序附带libxml2-utils

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

Perl 的XML::Twig

此命令附带XML::Twig
perl模块,有时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):

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'
2022-03-04