199

このXMLを考えると、XPathは、prop属性に含まれるすべての要素Foo(最初の3つのノード)を返します。

<bla>
 <a prop="Foo1"/>
 <a prop="Foo2"/>
 <a prop="3Foo"/>
 <a prop="Bar"/>
</bla>
4

9 に答える 9

349
//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')]

これにより、「何とか」要素にネストされているかどうかに関係なく、xml ドキュメント全体のすべての「a」要素が検索されます。

//a[contains(@prop,'Foo')]  

これを追加したのは、徹底的さとスタックオーバーフローの精神のためです。:)

于 2008-09-19T16:23:03.337 に答える
30

この XPath は、ノード名または属性名に関係なく、「Foo」を含む属性を持つすべてのノードを提供します。

//attribute::*[contains(., 'Foo')]/..

もちろん、必ずしも親ノードではなく、属性自体の内容に関心がある場合は、/.. をドロップしてください。

//attribute::*[contains(., 'Foo')]
于 2010-02-25T19:33:29.747 に答える
16
descendant-or-self::*[contains(@prop,'Foo')]

または:

/bla/a[contains(@prop,'Foo')]

または:

/bla/a[position() <= 3]

解剖:

descendant-or-self::

The Axis - 下にあるすべてのノードとノード自体を検索します。// よりもこれを言った方がよい場合がよくあります。// がどこでも意味するいくつかの実装に遭遇しました (子孫またはルート ノードの自己)。もう 1 つはデフォルトの軸を使用します。

* or /bla/a

タグ - ワイルドカード マッチ、および /bla/a は絶対パスです。

[contains(@prop,'Foo')] or [position() <= 3]

【 】内は状態です。@prop は、attribute::prop の省略形です。attribute は別の検索軸です。または、position() 関数を使用して最初の 3 つを選択することもできます。

于 2008-09-19T16:28:14.510 に答える
6

John C が最も近いですが、XPath では大文字と小文字が区別されるため、正しい XPath は次のようになります。

/bla/a[contains(@prop, 'Foo')]
于 2008-09-19T16:24:45.767 に答える
5

リンク自体のコンテンツも一致させる必要がある場合は、text()を使用します。

//a[contains(@href,"/some_link")][text()="Click here"]

于 2013-03-14T15:47:44.167 に答える
4

次のようなことを試しましたか:

//a[contains(@prop, "Foo")]

これまでに contains 関数を使用したことはありませんが、宣伝どおりに機能するはずだと思います...

于 2008-09-19T16:16:33.307 に答える
2

/bla/a[contains(@prop, "foo")]

于 2008-09-19T16:17:27.983 に答える
2

これを試して:

//a[contains(@prop,'foo')]

ドキュメント内のすべての「a」タグで機能するはずです

于 2008-09-19T16:18:51.927 に答える
1

上記のコードの場合... //*[contains(@prop,'foo')]

于 2008-09-19T16:17:49.573 に答える