相关:如何在(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>

当前回答

无需在macOS /大多数Unix上安装任何东西。

使用整洁

Cat filename.xml | tidy -xml -iq .xml

使用cat重定向查看文件,指定xml文件类型为tidy,并在安静输出时缩进,将抑制错误输出。JSON也可以使用-json。

其他回答

这个简单的解决方案不提供缩进,但对人眼来说要容易得多。此外,它还允许使用grep、head、awk等简单工具更容易地处理xml。

使用sed将'<'替换为前面有换行符的自身。

正如Gilles所提到的,在生产中使用它可能不是一个好主意。

# check you are getting more than one line out
sed 's/</\n</g' sample.xml | wc -l

# check the output looks generally ok
sed 's/</\n</g' sample.xml | head

# capture the pretty xml in a different file
sed 's/</\n</g' sample.xml > prettySample.xml

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

为此,您可以发布如下内容:

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

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

Xmllint——格式化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

Ubuntu

Sudo apt-get安装libxml2-utils

Cygwin

Apt-cyg安装libxml2

操作系统

要在MacOS和Homebrew上安装此程序,请执行以下操作: 酿造安装libxml2

Git

如果你想要代码,也可以在Git上使用: Git克隆Git://git.gnome.org/libxml2

xidel:

xidel -s input.xml -se . --output-node-format=xml --output-node-indent
<root>
  <foo a="b">lorem</foo>
  <bar value="ipsum"/>
</root>

或者file:write("output.xml",.,{"indent":true()})保存到文件中。

我花了很长时间才找到能在我的mac上运行的软件。以下是对我有效的方法:

brew install xmlformat
cat unformatted.html | xmlformat