XMLの解析を学ぶことは、しばしば複雑なベンチャーと見なされますが、そうである必要はありません。 XMLは高度かつ厳密に構造化されているため、比較的予測可能です。仕事を管理しやすくするのに役立つツールもたくさんあります。
私のお気に入りのXMLユーティリティの1つは、端末用のXMLツールキットであるXMLStarletです。 XMLStarletを使用すると、XMLデータの検証、解析、編集、フォーマット、および変換を行うことができます。 XMLStarletは比較的最小限のコマンドですが、XMLをナビゲートする可能性は十分にあるため、この記事では、XMLStarletを使用してXMLデータをクエリする方法を示します。
XMLStarletは、CentOS、Fedora、およびその他の多くの最新のLinuxディストリビューションにデフォルトでインストールされるため、ターミナルを開いてxmlstarlet
と入力するだけです。 それにアクセスします。 XMLStarletがまだインストールされていない場合は、オペレーティングシステムがXMLStarletのインストールを提案します。
または、xmlstarlet
をインストールすることもできます パッケージマネージャーからのコマンド:
$ sudo dnf install xmlstarlet
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
macOSでは、MacPortsまたはHomebrewを使用します。 Windowsでは、Chocolateyを使用します。
他のすべてが失敗した場合は、Sourceforgeのソースコードから手動でインストールできます。
XMLStarletを使用したXMLの解析
独自のパーサーを記述できるソフトウェアライブラリやfop
などの複雑なコマンドなど、XMLデータの解析と変換に役立つように設計されたツールは多数あります。 およびxsltproc
。ただし、XMLデータを処理する必要がない場合もあります。重要なデータを抽出したり、更新したり、検証したりするための便利な方法が必要です。自発的なXMLインタラクションには、xmlstarlet
を使用します 、最も一般的なXMLタスクを実行する古典的な「スイスアーミーナイフ」スタイルのアプリケーション。 --help
と一緒にコマンドを実行すると、何が提供されるかを確認できます。 オプション:
$ xmlstarlet --help
使用法:xmlstarlet [] [ ]
ここで、は次のいずれかです:
ed(または編集)-XMLドキュメントの編集/更新
sel(または選択)-データの選択またはXMLドキュメントのクエリ(XPATHなど)
tr(または変換)-XMLドキュメントの変換XSLTの使用
val(または検証)-XMLドキュメントの検証(整形式/ DTD / XSD / RelaxNG)
fo(またはフォーマット)-XMLドキュメントのフォーマット
el (または要素)-XMLドキュメントの要素構造を表示します
c14n(またはcanonic)-XMLの正規化
ls(またはlist)-ディレクトリをXMLとして一覧表示します
[...]
--help
を追加すると、さらにヘルプが表示されます。 これらのサブコマンドの最後まで:
$ xmlstarlet sel --help
-Qまたは--quiet-標準出力には何も書き込みません。
-Cまたは--comp-生成されたXSLTを表示します
-Rまたは- -root-ルート要素を出力
-Tまたは--text-出力はテキスト(デフォルトはXML)
-Iまたは--indent-インデント出力
[。 。]
selを使用したデータの選択
xmlstarlet select
を使用して、XMLでデータを表示できます。 (sel
略して)コマンド。簡単なXMLドキュメントは次のとおりです。
<?xml version ="1.0" encoding ="UTF-8" Standal ="no"?>
Fedora
7
Moonshine
Live
Fedora すべて
Fedora Core
6
Zod
XMLファイルでデータを検索する場合、最初のタスクは、探索するノードに焦点を当てることです。ノードへのパスがわかっている場合は、--value-of
を使用してフルパスを指定します オプション。探索を開始するドキュメントオブジェクトモデル(DOM)ツリーの早い段階で、より多くの情報が表示されます:
$ xmlstarlet select --template \
--value-of / xml / os / linux / distribution \
--nl myfile.xml
Fedora
7
ムーンシャイン
ライブ
Fedora
すべて
pre 6
--nl
は「改行」の略で、大量の空白を挿入して、結果が表示された後にターミナルプロンプトが改行を取得できるようにします。サンプル出力の余分なスペースの一部を削除しました。DOMツリーにさらに降りて、焦点を絞ります:
$ xmlstarlet select --template \
--value-of / xml / os / linux / distribution / name \
--nl myfile.xml
Fedora
Fedoraコア条件付き選択 XMLをナビゲートおよび解析するための最も強力なツールの1つは、XPathと呼ばれます。 XML検索で使用される構文を管理し、XMLライブラリから関数を呼び出します。 XMLStarletはXPath式を理解するため、XPath関数を使用して選択を条件付きにすることができます。 XPathは豊富な機能を備えており、W3Cによって詳細に文書化されていますが、MozillaのXPath文書はより簡潔だと思います。
角かっこをテスト関数として使用して、要素の内容をある値と比較できます。
<name>
の値のテストは次のとおりです 要素。特定の一致にのみ関連付けられたリリース番号を返します。サンプルXMLファイルに1から始まるすべてのFedoraリリースが含まれていると想像してみてください。古い名前「FedoraCore」に関連付けられているすべてのリリース番号を表示するには(プロジェクトはリリース7以降の名前から「Core」を削除しました):
>$ xmlstarlet sel --template \
--value-of'/ xml / os / linux / distribution [name ="Fedora Core"] / release' \
--nl myfile.xml
6
5
4
3
2
1
--value-of
を変更することで、これらのリリースのすべてのコードネームを表示することもできます。/xml/os/linux/distribution[name = "Fedora Core"]/codename
へのパス 。パスのマッチングと値の取得 XMLタグをノードとして表示する利点は、ノードを見つけたら、それをデータの現在の「ディレクトリ」と見なすことができることです。少なくともファイルシステムの意味では、実際にはディレクトリではありませんが、クエリできるデータのコレクションです。 XMLStarletは、宛先とその「内部」のデータを分離しておくために、
--match
と照合しようとしているものを区別します。 オプションと、--value-of
を使用して必要なデータの値 オプション。
<spin>
ノードにはいくつかの要素が含まれています。それがあなたの目的地になります。そこに着いたら、--value-of
を使用できます 値を指定する要素を指定します。すべての要素を確認するには、ドット(.
)を使用します )現在の場所を表す:$ xmlstarlet sel --template \
--match'/ xml / os / linux / distribution / spin' \
--value-of'。' --nl myfile.xml\
ライブ
Fedora
すべてDOMのナビゲートと同様に、XPath式を使用して、返されるデータの範囲を制限できます。この例では、
last()
を使用しますspin
の最後の要素だけを取得する関数 ノード:$ xmlstarlet select --template \
--match'/ xml / os / linux / distribution / spin' \
--value-of'* [last()]' --nl myfile.xml
すべてこの例では、
position()
を使用しますspin
で特定の要素を選択する関数 ノード:$ xmlstarlet select --template \
--match'/ xml / os / linux / distribution / spin' \
--value-of'* [position()=2]'- -nl myfile.xml
Fedora
--match
および--value-of
オプションは重複する可能性があるため、それらをどのように一緒に使用するかはあなた次第です。サンプルXMLの場合、これら2つの式は同じことを行います。$ xmlstarlet select --template \>
--match'/ xml / os / linux / distribution / spin' \
--value-of'。' \
--nl myfile.xml
Live
Fedora
Everything
$ xmlstarlet select --template \
--match'/ xml / os / linux / distribution'\
--value-of' spin'\
--nl myfile.xml
Live
Fedora
EverythingXMLに慣れること
XMLは冗長で扱いにくいように見えることがありますが、XMLと対話するために構築されたツールは、一貫して私を驚かせます。 XMLを利用したい場合は、XMLStarletが優れたエントリポイントになる可能性があります。次にXMLファイルを開いて構造化データを確認するときは、XMLStarletを使用して、代わりにそのデータをクエリできるかどうかを確認してください。 XMLを快適に使用できるほど、堅牢で柔軟なデータ形式として機能しやすくなります。
Linux