1

次の XML があります。

<pets>
    <dog name="Rupert" color="grey"/>
    <dog name="Ralph" color="brown"/>
    <cat name="Marvin the Cat" color="white"/>
    <cat name="Garfield the Cat" color="orange"/>
    <cat name="Cat" color="grey"/>
    <cat name="Fluffy" color="black"/>
</pets>

次の XPath クエリがあります。

//cat[@*[translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')] = 'marvin the cat']

しかし、結果は返されません。@*の値を小文字に変換しようとしています。

私が探しているのは、大文字と小文字を区別せずに「単語全体に一致する」結果です。このクエリを変更して、必要な結果を得るにはどうすればよいですか?

注: XPath 2.0 関数を使用したかったのmatchesですが、XPath 1.0 に限定されていることがわかりました。したがって、回避策が必要です。

4

2 に答える 2

6

述語を途中で終了しました。これを試して:

//cat[@*[translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'marvin the cat']]
于 2012-05-02T21:52:43.127 に答える
1

すべての属性の翻訳を回避しています....

//cat[translate(@name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'marvin the cat']
于 2012-05-02T21:55:32.770 に答える