Каков правильный XPath для выбора атрибутов, содержащих "foo"?
учитывая этот XML, какой XPath возвращает все элементы, чьи
9 ответов
//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>
этот сайт отлично подходит для тестирования такого рода вещей
http://www.xmlme.com/XpathTool.aspx
изменить: Другое дело, что, хотя XPath выше вернет правильный ответ для этого конкретного xml, если вы хотите гарантировать, что вы получите только элементы " a "в элементе" blah", вы должны, как и другие, также использовать
/bla/a[contains(@prop,'Foo')]
этот будет искать все элементы " a "во всем xml-документе, независимо от того, вложены в элемент" бла"
//a[contains(@prop,'Foo')]
Я добавил это ради основательности и в духе stackoverflow. :)
этот XPath даст вам все узлы, которые имеют атрибуты, содержащие " Foo " независимо от имени узла или имени атрибута:
//attribute::*[contains(., 'Foo')]/..
конечно, если вас больше интересует содержимое самого атрибута, а не обязательно их родительского узла, просто отбросьте /..
//attribute::*[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")]
Я никогда не использовал функцию contains раньше, но подозреваю, что она должна работать так, как рекламируется...
Если Вам также нужно сопоставить содержимое самой ссылки, используйте text ():
//a[contains(@href,"/some_link")][text()="Click here"]
попробуйте это:
/ / a[содержит (@prop, 'foo')]
Это должно работать для любых тегов " a " в документе