Какой правильный XPath для выбора атрибутов, которые содержат «foo»?
141912 просмотра
9 ответа
Учитывая этот XML, что XPath возвращает все элементы, prop
атрибут которых содержит Foo
(первые три узла):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
Автор: ripper234
Источник
Размещён: 17.05.2019 02:31
Ответы (9)
268 плюса
//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. :)
Автор: evilhomer Размещён: 19.09.2008 04:2320 плюса
Этот XPath даст вам все узлы, которые имеют атрибуты, содержащие 'Foo', независимо от имени узла или имени атрибута:
//attribute::*[contains(., 'Foo')]/..
Конечно, если вас больше интересует содержимое самого атрибута, а не его родительский узел, просто удалите / ..
//attribute::*[contains(., 'Foo')]
Автор: Alex Beynenson
Размещён: 25.02.2010 07:33
15 плюса
descendant-or-self::*[contains(@prop,'Foo')]
Или же:
/bla/a[contains(@prop,'Foo')]
Или же:
/bla/a[position() <= 3]
расчлененный:
descendant-or-self::
Ось - поиск через каждый узел внизу и сам узел. Часто лучше сказать это, чем //. Я сталкивался с некоторыми реализациями, где // означает где угодно (потомок или self корневого узла). Другой использует ось по умолчанию.
* or /bla/a
Тег - это подстановочный знак, а / bla / a - абсолютный путь.
[contains(@prop,'Foo')] or [position() <= 3]
Условие в пределах []. @prop - это сокращение для attribute :: prop, так как attribute это еще одна ось поиска. В качестве альтернативы вы можете выбрать первые 3 с помощью функции position ().
Автор: 1729 Размещён: 19.09.2008 04:285 плюса
John C - самый близкий, но XPath чувствителен к регистру, поэтому правильный XPath будет:
/bla/a[contains(@prop, 'Foo')]
Автор: Metro Smurf
Размещён: 19.09.2008 04:24
4 плюса
Вы пробовали что-то вроде:
// a [содержит (@prop, "Foo")]
Я никогда раньше не использовал функцию contains, но подозреваю, что она должна работать как рекламируется ...
Автор: toddk Размещён: 19.09.2008 04:164 плюса
Если вам также нужно сопоставить содержимое самой ссылки, используйте text ():
//a[contains(@href,"/some_link")][text()="Click here"]
2 плюса
1 плюс
1 плюс
попробуй это:
// а [содержит (@ проп, 'Foo')]
это должно работать для любых тегов "а" в документе
Автор: Dani Duran Размещён: 19.09.2008 04:18Вопросы из категории :
- xml Обработка XML в Python
- xml Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- xml Removing nodes from an XmlDocument
- xml Как анализировать XML-файлы?
- xml XmlSerializer - произошла ошибка, отражающая тип
- xml Как заставить Axis 1.4 не генерировать несколько префиксов для одного и того же пространства имен XML?
- xml Проверьте, существует ли элемент XML
- xml Какой правильный XPath для выбора атрибутов, которые содержат «foo»?
- xml Инструмент проверки XML-схемы (XSD)?
- xml Как красиво печатать XML из Java?
- xpath Создать XML-узлы на основе XPath?
- xpath XPath выберите узел с пространством имен
- xpath Использование Xpath с пространством имен по умолчанию в C #
- xpath Как я могу преобразовать строку в верхний или нижний регистр с помощью XSLT?
- xpath Как разобрать XML в Bash?
- xpath Сопоставление узла на основе значения брата с XPath
- xpath Selenium xpath flow
- xpath Как получить NameTable из XDocument?
- xpath SimpleXML: выбор элементов, имеющих определенное значение атрибута