在 Linux 命令行中格式化輸出 xml
xml(可擴展標記語言)也是一種人類可讀的標記語言,但是如同 json 文件一樣,沒有縮進格式(或者壓縮)的 xml 文件,讀起來那是挺頭疼的。
首先來看一下我們這篇文章要達到的目的,如下圖所示:
要實現這種效果,我們總結了三種方法。作為演示的例子,我們使用如下文件 email.xml:?
方法1:使用 xmllint 格式化打印 xml
xmllint 工具提供了 --format 選項,可以讓用戶重新格式化 xml 文件。如下語法所示:
比如,作為演示,我們使用 email.xml:
格式化輸出,默認縮進兩個空格。如果想要修改為更多的空格(比如4個空格),可以使用環境變量 XMLLINT_INDENT。
比如,我們使用 email.xml 作為例子,使其縮進為 4 個空格:
結合前一個例子,大家可以看到區別嗎?
方法2:使用 XMLStarlet 工具包
XMLStarlet 提供了一組命令,分別用于不同的目的。其中涉及到了 xml 命令,可以通過該命令來執行與 xml 文件相關的操作。
但是在使用之前,需要手動安裝,如下所示:
要格式化輸出 xml,需要使用 xml 命令的 format 選項,如下所示:
另外,它還提供了一些其他的選項,如下:
- -n 不添加空格,結果類似于文本向左對齊;
- -t 使用 tab 鍵輸出以提高可讀性;
- -o 省略 xml 生命,除了在文件的頂部添加 <?xml versinotallow=”1.0″?>;
- -s 添加任意數量的空格。
比如,我們使用 fo 添加 6 個空格來格式化輸出 xml 文件:
方法3:使用 xml_pp 命令
這個方法不是很靈活,因為 xml_pp 是 Perl 的一個模塊,名為 XML::Twig。
它不會輸出內容,但是會直接修改源文件。
它在使用之前,同樣需要手動安裝。如果你使用的是基于 Debian 的系統,可使用如下命令:
比如,我們使用 record 模式來格式化輸出 email.xml:
這里,-i 選項用于在原始文件中進行更改,同時用于附加擴展名。
-s 選項用于使用樣式選項,這里我使用了 record。