З огляду на цей XML, що XPath повертає всі елементи, prop
атрибут яких містить Foo
(перші три вузли):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
З огляду на цей XML, що XPath повертає всі елементи, prop
атрибут яких містить Foo
(перші три вузли):
<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>
Редагувати: Ще одна річ, що слід зазначити, що хоча XPath вище поверне правильну відповідь для конкретного xml, якщо ви хочете гарантувати, що ви отримаєте лише елементи "a" в елементі "bla", ви повинні, як і інші згадували, також використовувати
/bla/a[contains(@prop,'Foo')]
Це дозволить шукати всі елементи "a" у вашому XML-документі, незалежно від того, що вони вкладені в "blah" елемент
//a[contains(@prop,'Foo')]
Я додав це заради ґрунтовності та в дусі stackoverflow. :)
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::
Вісь - пошук кожного вузла під ним і самого вузла. Часто краще сказати це, ніж //. Я стикався з деякими реалізаціями, де // означає будь-де (decendant або self кореневого вузла). Інші використовують вісь за замовчуванням.
* or /bla/a
Тег - підстановочна відповідність, і / bla / a - абсолютний шлях.
[contains(@prop,'Foo')] or [position() <= 3]
Умова в межах []. @prop - це скорочення для attribute :: prop, оскільки атрибут - інша вісь пошуку. Можна також вибрати перші 3 за допомогою функції position ().
John C є найближчим, але XPath чутливий до регістру, тому правильним XPath було б:
/bla/a[contains(@prop, 'Foo')]
Ви спробували щось на кшталт:
// a [містить (@prop, "Foo")]
Я ніколи раніше не використовував функцію містить, але підозрюю, що вона повинна працювати як рекламується ...
Якщо вам також потрібно відповідати вмісту самого посилання, використовуйте text ():
//a[contains(@href,"/some_link")][text()="Click here"]
/ bla / a [містить (@prop, "foo")]
спробуйте це:
// a [містить (@ prop, 'foo')]
які повинні працювати для будь-яких тегів "a" в документі