是否有(unix)shell 脚本以人类可读的形式格式化 XML?
基本上,我希望它转换以下内容:
<root><foo a="b">lorem</foo><bar value="ipsum" /></root>
…变成这样的东西:
<root> <foo a="b">lorem</foo> <bar value="ipsum" /> </root>
xmllint
该实用程序附带libxml2-utils:
libxml2-utils
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xmllint --format -
Perl 的XML::Twig
XML::Twig
此命令附带XML::Twig perl模块,有时xml- twig-tools打包:
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):
xml.dom.minidom
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'