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

シェルスクリプトを使用して XML を解析するには?

これが完全に機能する例です。
メールアドレスのみを抽出する場合は、次のようにすることができます。
1) XML ファイル spam.xml が次のようなものであるとします

<spam>
<victims>
  <victim>
    <name>The Pope</name>
    <email>[email protected]</email>
    <is_satan>0</is_satan>
  </victim>
  <victim>
    <name>George Bush</name>
    <email>[email protected]</email>
    <is_satan>1</is_satan>
  </victim>
  <victim>
    <name>George Bush Jr</name>
    <email>[email protected]</email>
    <is_satan>0</is_satan>
  </victim>
</victims>
</spam>

2) この短い bash コードでメールを取得して処理できます:

#!/bin/bash
emails=($(grep -oP '(?<=email>)[^<]+' "/my_path/spam.xml"))

for i in ${!emails[*]}
do
  echo "$i" "${emails[$i]}"
  # instead of echo use the values to send emails, etc
done

この例の結果:

0 [email protected]
1 [email protected]
2 [email protected]

重要な注意:
これを重大な問題に使用しないでください。これは、いろいろ試したり、すばやく結果を取得したり、grep を学習したりするのには問題ありませんが、間違いなくすべきです。 生産用の XML パーサーを探し、学習し、使用します (以下の Micha のコメントを参照してください)。


xmllint を試すことができます

<ブロック引用>

xmllint プログラムは、コマンドラインで xmlfile として指定された 1 つ以上の XML ファイルを解析します。選択したオプションに応じて、さまざまなタイプの出力が印刷されます。 XMLコードとXMLパーサー自体の両方でエラーを検出するのに役立ちます

--pattern オプションを使用して、xpath で XML ドキュメント内の要素を選択できます。

Mac OS X (Yosemite) では、デフォルトでインストールされています。
Ubuntu では、まだインストールされていない場合は、apt-get install libxml2-utils を実行できます。


誰もxmlshについて言及していないことに驚いています。ミッション ステートメント :

<ブロック引用>

Unix シェルの哲学と設計に基づく XML 用のコマンド ライン シェル

xmlsh は使い慣れたスクリプト環境を提供しますが、特に xml プロセスのスクリプト作成用に調整されています。

シェルのようなコマンドのリストがここに提供されています。

xed を使用します sed に相当する多くのコマンド XML の場合、XPath を許可します ベースの検索と置換。


xmlstarlet もあります (Windows でも利用可能です)。

http://xmlstar.sourceforge.net/doc/xmlstarlet.txt


Linux
  1. 別のサーバーを使用してサーバーにSSH接続する方法は??

  2. Bashで文字列を連結する方法

  3. trace.py を使用して Python スクリプトをトレースする方法

  1. BashでCSVファイルを解析するには?

  2. Bashを使用してHTTPヘッダーを解析するには?

  3. Homebrew を使用して Mac で Python3.8 をデフォルトにする方法は?

  1. gdbを使用してLinuxでCプログラムをデバッグする方法

  2. Linux で XPATH の例を使用して XML を解析し、タグを削除する方法 (Linux で PIPE を使用して複数のコマンドを組み合わせる方法)

  3. rm を使わずにファイルを削除するには?