Почему все смотрят на атрибут "проп"? Я что-то пропустил? Это просто говорит получить первые три узла.
6
Все смотрят на атрибут реквизита, потому что это то, что спросили. Получить все узлы, где проп содержит "Foo". Добавьте <a prop="Foo5" />, и вы поймете, почему это не просто «первые три узла» ..
erlando
Вопрос в теле сформулирован плохо, независимо от названия. Действительно ли foo может быть в каком-либо атрибуте проп, или вы просто хотите первые три узла?
3
Да, обратитесь к названию, пожалуйста (и не стесняйтесь редактировать).
Изменить: Еще одна вещь, которую следует отметить, что хотя XPath выше вернет правильный ответ для этого конкретного XML, если вы хотите гарантировать, что вы получите только элементы "a" в элементе "bla", вы должны, как и другие упоминали, также использовать
/bla/a[contains(@prop,'Foo')]
Это будет искать вас всех элементов "а" во всем документе XML, независимо от того, были ли вложены в элемент "бла"
//a[contains(@prop,'Foo')]
Я добавил это ради тщательности и в духе stackoverflow. :)
Ось - поиск через каждый узел внизу и сам узел. Часто лучше сказать это, чем //. Я сталкивался с некоторыми реализациями, где // означает где угодно (потомок или self корневого узла). Другой использует ось по умолчанию.
* or /bla/a
Тег - это подстановочный знак, а / bla / a - абсолютный путь.
[contains(@prop,'Foo')] or [position() <= 3]
Условие в пределах []. @prop - это сокращение для attribute :: prop, так как attribute это еще одна ось поиска. В качестве альтернативы вы можете выбрать первые 3 с помощью функции position ().
Ответы:
Работает, если я использую этот XML, чтобы получить результаты обратно.
Изменить: Еще одна вещь, которую следует отметить, что хотя XPath выше вернет правильный ответ для этого конкретного XML, если вы хотите гарантировать, что вы получите только элементы "a" в элементе "bla", вы должны, как и другие упоминали, также использовать
Это будет искать вас всех элементов "а" во всем документе XML, независимо от того, были ли вложены в элемент "бла"
Я добавил это ради тщательности и в духе stackoverflow. :)
источник
xmlme.com
теперь перенаправляет на другой хост и, по-видимому, не размещает инструмент или что-то подобное.Этот XPath даст вам все узлы, которые имеют атрибуты, содержащие 'Foo', независимо от имени узла или имени атрибута:
Конечно, если вас больше интересует содержимое самого атрибута, а не его родительский узел, просто удалите / ..
источник
//@*[contains(., 'Foo')]
Или:
Или:
расчлененный:
Ось - поиск через каждый узел внизу и сам узел. Часто лучше сказать это, чем //. Я сталкивался с некоторыми реализациями, где // означает где угодно (потомок или self корневого узла). Другой использует ось по умолчанию.
Тег - это подстановочный знак, а / bla / a - абсолютный путь.
Условие в пределах []. @prop - это сокращение для attribute :: prop, так как attribute это еще одна ось поиска. В качестве альтернативы вы можете выбрать первые 3 с помощью функции position ().
источник
John C - самый близкий, но XPath чувствителен к регистру, поэтому правильный XPath будет:
источник
Вы пробовали что-то вроде:
// a [содержит (@prop, "Foo")]
Я никогда раньше не использовал функцию contains, но подозреваю, что она должна работать как рекламируется ...
источник
Если вам также необходимо сопоставить содержимое самой ссылки, используйте text ():
//a[contains(@href,"/some_link")][text()="Click here"]
источник
/ bla / a [содержит (@prop, "foo")]
источник
Для кода выше ... // * [содержит (@ prop, 'foo')]
источник
попробуй это:
// а [содержит (@ пропеллер, 'Foo')]
это должно работать для любых тегов "а" в документе
источник