HOWTO · Bash
Bash で XML を解析する
このチュートリアルでは、Bash で XML を解析する方法について説明します。
このページの内容
XML をいまだに扱っていない開発者を見つけることはほとんど不可能です。 これは、データの構造化と転送に広く使用されている人気のあるマークアップ言語です。
この記事では、Bash を介して XML を解析する方法を示します。
ここでは、2つのライブラリについて説明します。 最初のライブラリは xmllint で、2 番目のライブラリは XMLStarlet として知られています。
それらを使用する前に、それらをインストールする必要があります。
xmllint を使用して Bash で XML を解析する
これは、XML ファイルの解析に使用できる最も一般的なライブラリです。 ただし、使用する前にライブラリをダウンロードしてインストールする必要があります。
このライブラリをインストールするには、以下のコマンドを実行する必要があります。
sudo apt-get update -qq
sudo apt-get install -y libxml2-utils
apt-get を使用して libxml2-utils パッケージをインストールする必要があります。
MyXML.xml という名前の XML ファイルがある場合は、次のコマンドを使用して XML を簡単に取得できます。
xmllint MyXML.xml
上記のコマンドを実行すると、次のような出力が得られます。
<?xml version="1.0"?>
<specification>
<type>Laptop</type>
<model>Macbook</model>
<screenSizeInch>14</screenSizeInch>
</specification>
このライブラリには、いくつかのオプションまたはフラグが含まれています。 ライブラリで利用可能なオプションを以下に示します。
--auto- このフラグは、テスト用のドキュメントを生成するためのものです。--catalogs- このフラグはSGML_CATALOG_FILESのカタログを使用するためのものです。 それ以外の場合は、デフォルトで/etc/xml/catalogが使用されます。--chkregister- このフラグは、ノード登録をオンにするためのものです。--compress- このフラグは、出力のgzip圧縮をオンにするためのものです。--copy- このフラグは、内部コピーの実装をテストするためのものです。--c14n- このフラグは、stdoutによる解析結果をシリアル化する W3C XML Canonicalization (C14N) を使用するためのものです。 また、結果にコメントを保持します。--dtdvalid URL- このフラグは、検証のために URL によって指定された DTD を使用するためのものです。--dtdvalidfpi FPI- このフラグは、検証用の公開識別子 FPI が指定する DTD を使用するためのものです。 このフラグを使用するには、公開識別子として機能するカタログのエクスポートが必要になることに注意してください。--debug- このフラグはファイルを解析するためのものです。 また、ドキュメントのメモリ内バージョンである注釈付きツリーも出力します。--debugent- このフラグは、ドキュメントで定義されたエンティティをデバッグするためのものです。--dropdtd- このフラグは、出力から DTD を削除するためのものです。--dtdattr- このフラグは外部 DTD を取得します。 また、継承された属性をツリーに取り込みます。--encode- このフラグは、指定されたエンコーディングで出力を提供します。--format- このフラグは、出力を再フォーマットし、再インデントします。--help- このフラグは、xmllintの使用方法の概要を出力します。--html- このフラグは、HTML パーサーを使用するためのものです。--htmlout- このフラグは結果を HTML ファイルとして表示します。 結果をブラウザで表示/表示できるように、結果ツリー出力を囲む必要な HTML タグを出力します。--insert- このフラグは、有効な挿入をテストするためのものです。--loaddtd- このフラグは、外部 DTD を取得するためのものです。--load-trace- このフラグは、stderrへの処理時にロードされたすべてのドキュメントを表示します。--maxmem NNBYTES- このフラグは、パーサー メモリ サポートをテストするためのものです。 ここで、NNBYTESは、ライブラリが割り当てることができる最大バイト数です。--memory- このフラグはメモリからの解析用です。--noblanks- このフラグは、無視できる空白を削除します。--nocatalogs- このフラグは、カタログを使用しないことを指定します。--nocdata- このフラグは、同等のテキスト ノードを介してCDATAセクションを置き換えます。--noent- このフラグは、エンティティ参照をエンティティ値に置き換えます。--nonet- このフラグは、インターネットを使用して DTD またはエンティティを取得しないことを指定します。--noout- このフラグは出力を抑制します。xmllintはデフォルトで結果ツリーの出力を表示します。--nowarning- このフラグは、バリデーターやパーサーから警告を出さないように指定します。--nowrap- このフラグは、HTML doc ラッパーを出力しないことを指定します。--noxincludenod- このフラグはXInclude処理を行いますが、XInclude開始ノードと終了ノードを生成しないように指定します。--nsclean- このフラグは、冗長な名前空間宣言を削除するためのものです。--output FILE- このフラグは、xmllintが解析結果を保存するファイル パスを定義します。--path "PATH(S)"- このフラグは、DTD またはエンティティをロードするためにPATHSで指定されたFilesystemパスの (コロン区切りまたはスペース区切りの) リストを使用します。 ここで、スペース区切りのリストは引用符で囲みます。--pattern PATTERNVALUE- このフラグは、リーダー インターフェイスで使用できるパターン認識エンジンを実行するためのものです。 デバッグにも使用されます。--postvalid- このフラグは、解析が完了した後に検証するためのものです。--push- このフラグはpushモードを有効にします。--recover- このフラグは、無効なドキュメントの解析可能な部分を出力するためのものです。--relaxng SCHEMA- このフラグは、検証のためにSCHEMAという名前のRelaxNGファイルを使用します。--repeat- このフラグは、タイミングまたはプロファイリングのために 100 回繰り返すためのものです。--schema- このフラグは、SCHEMAとして知られる W3C XML スキーマ ファイルを使用します。--shell- ナビゲーション シェルを実行します。--stream- このフラグは API のストリーミング用です。--testIO- このフラグは、ユーザーの入出力サポートをテストします。--timing- このフラグは、xmllintがさまざまなステップを実行するのにかかる時間に関する情報を出力します。--valid- このフラグはドキュメントの有効性をチェックします。--version- このフラグはライブラリのバージョンを表示します。--walker- このフラグはwalkerモジュールをテストします--xinclude- このフラグはXInclude処理を行います。--xmlout- このフラグは主に--htmlと組み合わせて使用されます。 XML シリアライザーを使用してドキュメントを保存します。 主に HTML から XHTML への変換に使用されます。
XMLStarlet を使用して Bash で XML を解析する
XML ドキュメントを解析するためのもう 1つの一般的なライブラリは、XMLStarlet として知られています。 ライブラリの主要なコマンドは xmlstarlet です。
このライブラリをインストールするには、root として以下のコマンドを実行する必要があります。
sudo dnf install xmlstarlet
これには、XML ファイルの検証、変換、またはクエリを容易にする便利なオプションが含まれています。 ライブラリの最も単純なコマンドを使用して、XML ファイルを簡単に取得できます。
xmlstarlet format MyXML.xml
上記のコマンドを実行すると、XML ファイルの内容が次のような出力として表示されます。
<?xml version="1.0"?>
<specification>
<type>Laptop</type>
<model>Macbook</model>
<screenSizeInch>14</screenSizeInch>
</specification>
この記事で使用するコードはすべて Bash で記述されています。 Linux シェル環境でのみ動作します。