GNU/Linux >> Linux の 問題 >  >> Linux

XMLStarletを使用してLinuxターミナルでXMLを解析します

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
Everything
>

XMLに慣れること

XMLは冗長で扱いにくいように見えることがありますが、XMLと対話するために構築されたツールは、一貫して私を驚かせます。 XMLを利用したい場合は、XMLStarletが優れたエントリポイントになる可能性があります。次にXMLファイルを開いて構造化データを確認するときは、XMLStarletを使用して、代わりにそのデータをクエリできるかどうかを確認してください。 XMLを快適に使用できるほど、堅牢で柔軟なデータ形式として機能しやすくなります。


Linux
  1. Linuxターミナルでファイルをコピーする

  2. Linuxターミナルでファイルの名前を変更します

  3. Linuxターミナルでファイルを移動する

  1. Linuxターミナルを使用して、コンピューター内を移動します

  2. Linuxターミナルを使用して、コンピューターにあるファイルを確認します

  3. Linuxgrepコマンドの使用方法

  1. Linuxでhistoryコマンドを使用する方法

  2. Linuxターミナルでラジオを聞く

  3. どのLinuxターミナルコマンドを最もよく使用しますか?