Mac OS端末を介して特定のタグなしの.xmlファイルを検索する

Mac OS端末を介して特定のタグなしの.xmlファイルを検索する

次の提案があればありがとうございます。

何千もの.xmlファイルを含む「ABC」というフォルダがあります。 XMLのコア構造は同じです。

<product abcd…>
  <category>
  ...
  </category>
</product>

一部のxmlファイルは次のように考えることができます。効果的な必須タグが含まれているため<category>無効必須<category>タグが完全に欠落しているためです。閉じない</category>

したがって、目的は、</category>「ABC」フォルダ内のXMLにタグがない「無効な」xmlを端末経由で見つけることです。

どんな機会?

ベストアンサー1

すべてのXMLファイルの形式が正しいと仮定し、:を使用すると、次のように一致するxmlstarletすべてのファイルの入力ファイル名が出力されます。いいえ以下に直系の子categoryノードがありますproduct

xmlstarlet sel -t --if '/product/category' --else -f -nl ABC/*.xml

categoryどこにもノードがないファイルのみを検索したい場合:

xmlstarlet sel -t --if '//category' --else -f -nl ABC/*.xml

両方のコマンドでxmlstarlet指定されたXPath式が評価されます。式が見つかった1つ以上のノードのセットとして評価される場合、--ifテストは次のようになります。本物他のことは起こりません。それ以外の場合は、--elseブランチが評価され、-f -nl現在のファイル名が末尾の改行とともに出力されます。

ノードが欠落しているファイルに対していくつかの操作を実行すると仮定すると、category以下は関連ファイルを処理できるループを設定します。

for xml in ABC/*.xml; do
    if ! xmlstarlet sel -t --if '/product/category' -nl "$xml" >/dev/null
    then
        # process "$xml" here
    fi
done

macOSへのインストールはxmlstarletHomebrewを介して行うのが最善です。 Homebrewパッケージを呼び出すxmlstarletxmlxmlstarlet

おすすめ記事