Учитывая этот 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')]
Это будет искать все элементы "а" во всем документе XML, независимо от того, вложены ли они в элемент "бла"
//a[contains(@prop,'Foo')]
Я добавил это ради тщательности и в духе stackoverflow. :)
Этот XPath предоставит вам все узлы, у которых есть атрибуты, содержащие "Foo", независимо от имени или имени node:
//attribute::*[contains(., 'Foo')]/..
Конечно, если вас больше интересует содержимое самого атрибута, а не обязательно их родительский node, просто отпустите /..
//attribute::*[contains(., 'Foo')]
descendant-or-self::*[contains(@prop,'Foo')]
Или:
/bla/a[contains(@prop,'Foo')]
Или:
/bla/a[position() <= 3]
расчлененный:
descendant-or-self::
The Axis - поиск через каждый node снизу и сам node. Часто бывает лучше сказать это, чем //. Я столкнулся с некоторыми реализациями, где//означает где угодно (decendant или self of root node). Другие используют ось по умолчанию.
* or /bla/a
Тег - подстановочный знак и /bla/a - абсолютный путь.
[contains(@prop,'Foo')] or [position() <= 3]
Условие в []. @prop является сокращением для атрибута:: prop, поскольку атрибутом является другая ось поиска. В качестве альтернативы вы можете выбрать первые 3, используя функцию position().
John C является самым близким, но XPath чувствителен к регистру, поэтому правильным XPath будет:
/bla/a[contains(@prop, 'Foo')]
Вы пробовали что-то вроде:
//a [содержит (@prop, "Foo" )]
Я никогда раньше не использовал функцию contains, но подозреваю, что он должен работать как рекламируемый...
Если вам также необходимо сопоставить содержимое самой ссылки, используйте текст():
//a[contains(@href,"/some_link")][text()="Click here"]
/bla/a [содержит (@prop, "foo" )]
Для кода выше... // * [содержит (@prop, 'foo')]
попробуйте следующее:
//а [содержит (@проп, 'Foo')]
который должен работать для любых тегов "a" в документе