it-swarm-tr.com

"Foo" içeren öznitelikleri seçmek için doğru XPath nedir?

Bu XML verildiğinde, XPath, prop özelliği Foo (ilk üç düğüm) içeren tüm öğeleri döndürür:

<bla>
 <a prop="Foo1"/>
 <a prop="Foo2"/>
 <a prop="3Foo"/>
 <a prop="Bar"/>
</bla>
159
ripper234
//a[contains(@prop,'Foo')]

Sonuçları almak için bu XML'i kullanırsam çalışır.

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

Düzenleme: Unutulmaması gereken bir başka şey ise, yukarıdaki XPath, bu belirli xml için doğru cevabı verirken, yalnızca "bla" öğesinde "a" öğelerini almanızı garanti etmek istiyorsanız, diğerlerinin de kullandığı gibi

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

Bu, "x" belgenizdeki "a" öğelerinin tümünü "blah" öğesinde yuvalanmış olmasına bakılmaksızın arar.

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

Bunu, iyilik adına ve istifleme akışının ruhunda ekledim. :)

278
evilhomer

Bu XPath, düğüm adı veya öznitelik adından bağımsız olarak, 'Foo' içeren öznitelikleri olan tüm düğümleri verecektir:

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

Tabii ki, özniteliğin içeriğiyle daha fazla ilgileniyorsanız ve mutlaka üst düğümleri değil, sadece /.

//attribute::*[contains(., 'Foo')]
22
Alex Beynenson
descendant-or-self::*[contains(@prop,'Foo')]

Veya:

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

Veya:

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

Dissected:

descendant-or-self::

Eksen - altındaki her düğümü ve düğümün kendisini arar. Bunu söylemek genellikle // den daha iyidir. // herhangi bir yerde anlamına gelen bazı uygulamalar ile karşılaştım (onluk veya kök düğümün özü). Diğeri varsayılan ekseni kullanır.

* or /bla/a

Etiket - bir joker karakter eşleşmesi ve/bla/a mutlak bir yoldur.

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

[] İçindeki durum. @prop, attribute :: prop için kısayoldur, çünkü nitelik başka bir arama eksenidir. Alternatif olarak position () işlevini kullanarak ilk 3'ü seçebilirsiniz.

16
1729

En yakın John C, ancak XPath büyük/küçük harf duyarlıdır, bu nedenle doğru XPath şöyle olacaktır:

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

Bağlantının içeriğiyle de eşleşmeniz gerekiyorsa, text () kullanın:

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

4
DevDude

Gibi bir şey denedin mi:

// a [içerir (@prop, "Foo")]

Daha önce hiç Döndürme işlevini kullanmamıştım, ancak reklamı yapılan şekilde çalışması gerektiğinden şüpheleniyorum ...

4
toddk

/ bla/a [içerir (@prop, "foo")]

2
David Hill

Yukarıdaki kod için ... // * [içerir (@ prop, 'foo')]

1
digiguru

bunu dene:

// bir [içerir (@ pervane, 'foo')]

belgedeki herhangi bir "a" etiketi için çalışması gerekir

1
Dani Duran