3

以下の XPath 式を使用して、XML ドキュメントで大文字と小文字を区別しない検索を実行しようとしています。どうやら、結果が異なるため、間違っているようです。ここで誰かが私の間違いを指摘してくれることを願っていますか?

値が Primary Objectives<Sect>であるすべての Obj 要素の数を取得しようとしています。<Header>カウントを取得するために、うまく機能する以下の式を使用しています。

式 - 大文字と小文字の区別なし: 31 個のノードを返します。

("count(//TaggedPDF-doc//Part//Sect//Sect//Sect[contains(Header,\"Primary objectives\")]//OBJ)");

しかし、「主な目的」の大文字と小文字を区別しないようにしたいと考えています。だから、私はそのために翻訳を使用しようとしていました. 式 - 「主目的」の大文字と小文字を区別しないように変換を追加します。

0 ノードを返します。

$count = $dom->findvalue("count(//TaggedPDF-doc//Part//Sect//Sect//Sect[contains(H4,
         translate(\"Primary Objectives\", 
                   'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 
                   'abcdefghjiklmnopqrstuvwxyz')
         )
]//OBJ)");

ここで誰かが私がどこでこれを間違えたのかを指摘できることを願っています.

前もってありがとう、シマック

4

4 に答える 4

4

//まず、これらのすべての手順はおそらく必要ありません。これは//、いずれかの側で名前が付けられたノード間の任意の数のレベルの要素を許可するためです。単一の/手順を使用してルートからのフル パスを列挙するか、単に 1 つを使用//して全体を検索します。木。

Header次に、比較対象の固定文字列ではなく、比較対象の値を小文字にする必要があります。もっと似たものを試してください

count(//Sect[
          Header[
            contains(
              translate(
                .,
                'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
                'abcdefghijklmnopqrstuvwxyz'),
              'primary objectives'
            )
          ]
        ]//Obj)

これにより、 「主な目的」を含む子を持つObja 内の任意の場所に発生する要素の数が得られます(大文字と小文字は区別されません)。これは、とは少し異なります。SectHeader

count(//Sect[contains(translate(Header, ....

Sectに複数が含まれる場合Header、後者は、それらのいずれかで一致を探すのではなく、それぞれの最初のもののみをチェックします。 HeaderSect

于 2013-07-05T14:23:07.683 に答える