0

多数のxmlファイルで、特定のタグが欠落しているファイル、またはそのタグ内の値が0であるファイルを検索しようとしています。

基本的に、各xmlファイルには1つ以上のLIBRARYタグがあり、それらの中にネストされているのは1つ以上のSECTIONタグであり、それらの中には1つ以上のSHELFタグがあります。SHELFタグ内には、ゼロではない整数値を持つBOOKタグが必要です。

このBOOK値が0であるか、BOOKが欠落しているファイルを見つける必要がありますが、各セクションの最初の棚にのみあります。したがって、複数のLIBRARYタグ内にネストされた複数のSECTIONタグがある場合は、すべてのSECTIONの最初のSHELFを確認する必要があります。

<LIBRARY>
    <SECTION>
        <SHELF>
            <BOOK>10000</BOOK>
        </SHELF>
    </SECTION>
</LIBRARY>

特定のディレクトリ内の各ファイルを検索し、パターンに一致するファイルのリストを返すことで、これを実現するUnixスクリプトを作成しようとしています。私はsedでそれを行う方法を探していましたが、この特定の問題の解決策を見つけることができないようです。また、上記のように、xmlファイルは複数行のファイルです。あなたが提供できるどんな助けにも感謝します!

4

1 に答える 1

0

XPath を使用して、本がない、または 0 本の最初の棚が存在するかどうかを確認できます。

exists(//LIBRARY/SECTION/SHELF[1][empty(BOOK) or BOOK = 0])

または、XPath 2 を使用すると読みやすくなり、最初のすべての棚をチェックして、0 本でないかどうかを確認します。

not(every $shelf in //LIBRARY/SECTION/SHELF[1] satisfies $shelf/BOOK[. != 0]) 

ここで、その xpath をすべてのファイルに適用し、一致するファイルを一覧表示するための xml ツールが必要です。

私のXidelは、XPath 条件が true の場合、ファイル名/URL を出力して直接実行できます。

 xidel --quiet -e 'if (not(every $shelf in //LIBRARY/SECTION/SHELF[1] satisfies $shelf/BOOK[. != 0])) then $url else ""' *.xml

(数千のファイルがある場合は遅くなる可能性がありますが、それほど多くのファイルでテストしたことはありません)

于 2013-02-04T17:39:58.570 に答える