このXMLの場合、どのXPathがprop
属性を含むすべての要素を返しますかFoo
(最初の3つのノード):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
このXMLの場合、どのXPathがprop
属性を含むすべての要素を返しますかFoo
(最初の3つのノード):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
回答:
//a[contains(@prop,'Foo')]
このXMLを使用して結果を取り戻すと機能します。
<bla>
<a prop="Foo1">a</a>
<a prop="Foo2">b</a>
<a prop="3Foo">c</a>
<a prop="Bar">a</a>
</bla>
編集:もう1つの注意点は、上記のXPathは特定のxmlに対して正しい答えを返すが、要素「bla」の「a」要素のみを取得することを保証したい場合は、他の人も使用しているように、
/bla/a[contains(@prop,'Foo')]
これは、「blah」要素にネストされているかどうかに関係なく、XMLドキュメント全体のすべての「a」要素を検索します。
//a[contains(@prop,'Foo')]
徹底とスタックオーバーフローの精神でこれを追加しました。:)
xmlme.com
現在、他のホストにリダイレクトし、ツールやそのようなものをホストしているようには見えません。
このXPathは、ノード名または属性名に関係なく、「Foo」を含む属性を持つすべてのノードを提供します。
//attribute::*[contains(., 'Foo')]/..
もちろん、属性の内容にもっと興味があり、必ずしも親ノードに興味がない場合は、/をドロップするだけです。
//attribute::*[contains(., 'Foo')]
//@*[contains(., 'Foo')]
descendant-or-self::*[contains(@prop,'Foo')]
または:
/bla/a[contains(@prop,'Foo')]
または:
/bla/a[position() <= 3]
解剖:
descendant-or-self::
Axis-下にあるすべてのノードとノード自体を検索します。多くの場合、これは//よりも優れています。//がどこでも(ルートノードの子孫または自己)を意味するいくつかの実装に遭遇しました。もう1つはデフォルトの軸を使用します。
* or /bla/a
タグ-ワイルドカード一致。/bla/aは絶対パスです。
[contains(@prop,'Foo')] or [position() <= 3]
[]内の条件。@propはattribute :: propの省略形です。attributeは別の検索軸だからです。または、position()関数を使用して最初の3つを選択することもできます。
あなたは次のようなことを試しましたか?
// a [contains(@prop、 "Foo")]
私は以前にcontains関数を使用したことがありませんが、宣伝どおりに機能するはずです...
リンク自体のコンテンツも一致させる必要がある場合は、text()を使用します。
//a[contains(@href,"/some_link")][text()="Click here"]