626

関連: (unix) シェルスクリプトで JSON をプリティプリントするにはどうすればよいですか?

XMLを人間が読める形式にフォーマットする(unix)シェルスクリプトはありますか?

基本的に、私はそれを次のように変換したい:

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

...次のようなものに:

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

11 に答える 11

183

xmllint --format yourxmlfile.xml

xmllintはコマンド ライン XML ツールであり、libxml2( http://xmlsoft.org/ ) に含まれています。

================================================

注: インストールしていない場合はlibxml2、次の手順でインストールできます。

CentOS

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 install libxml2-utils

シグウィン

apt-cyg install libxml2

マックOS

Homebrew を使用して MacOS にこれをインストールするには、次のようにします。 brew install libxml2

ギット

コードが必要な場合は、Git でも利用できます。 git clone git://git.gnome.org/libxml2

于 2013-11-15T15:34:53.020 に答える
45

最初にインストールする必要がある場合があるtidyを使用することもできます(例: Ubuntu の場合: sudo apt-get install tidy)。

このためには、次のようなものを発行します。

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

注: には多くの追加の可読性フラグがありますが、ワードラップの動作はもつれを解くのが少し面倒です ( http://tidy.sourceforge.net/docs/quickref.html )。

于 2014-10-12T16:29:08.500 に答える
11

xmllint はインプレース フォーマットをサポートします:

for f in *.xml; do xmllint -o $f --format $f; done

Daniel Veillard は次のように書いています。

xmllint -o tst.xml --format tst.xml 出力を開いてシリアル化する前に、パーサーが入力をツリーに完全にロードするため、安全であると思います 。

インデント レベルはXMLLINT_INDENT、デフォルトで 2 つのスペースである環境変数によって制御されます。インデントを 4 つのスペースに変更する方法の例:

XMLLINT_INDENT='    '  xmllint -o out.xml --format in.xml

--recoverXML 文書が壊れている場合、オプションが不足している可能性があります。または、厳密な XML 出力で弱い HTML パーサーを試してください。

xmllint --html --xmlout <in.xml >out.xml

--nsclean--nonet--nocdata--noblanksなどが役立つ場合があります。マニュアルページを読んでください。

apt-get install libxml2-utils
apt-cyg install libxml2
brew install libxml2
于 2018-05-28T20:18:09.667 に答える