Каков корректный XPath для выбора атрибутов, которые содержат “нечто”?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

162
задан Jon Schneider 21 September 2015 в 15:12
поделиться

8 ответов

//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 документе, независимо от того, чтобы быть вложенным в "скучном" элементе

//a[contains(@prop,'Foo')]  

я добавил это ради тщательности и в духе stackoverflow.:)

284
ответ дан evilhomer 23 November 2019 в 21:21
поделиться
descendant-or-self::*[contains(@prop,'Foo')]

Или:

/bla/a[contains(@prop,'Foo')]

Или:

/bla/a[position() <= 3]

Разделенный:

descendant-or-self::

Ось - перерывают каждый узел внизу и сам узел. Часто лучше сказать это, чем//. Я встретился с некоторыми реализациями, где//означает где угодно (потомок или сам корневого узла). Другое использование ось по умолчанию.

* or /bla/a

Тег - подстановочное соответствие и/bla/a являются полным путем.

[contains(@prop,'Foo')] or [position() <= 3]

условие в []. @prop является стенографией для атрибута:: опора, поскольку атрибут является другой поисковой осью. Кроме того, можно выбрать первые 3 при помощи положения () функция.

16
ответ дан 1729 23 November 2019 в 21:21
поделиться

Имейте Вас, попробовал что-то как:

//[содержит (@prop, "Нечто")]

, я никогда не использовал, содержит функцию прежде, но подозревайте, что это должно работать, как рекламируется...

4
ответ дан toddk 23 November 2019 в 21:21
поделиться

John C является самым близким, но XPath чувствителен к регистру, таким образом, корректный XPath был бы:

/bla/a[contains(@prop, 'Foo')]
6
ответ дан Metro Smurf 23 November 2019 в 21:21
поделиться

/bla/a [содержит (@prop, "нечто")]

2
ответ дан David Hill 23 November 2019 в 21:21
поделиться

Для кода выше...//* [содержит (@prop, 'нечто')]

1
ответ дан digiguru 23 November 2019 в 21:21
поделиться

попробуйте это:

//[содержит (@prop, 'нечто')]

, который должен работать на любые теги "a" в документе

1
ответ дан Dani Duran 23 November 2019 в 21:21
поделиться

Этот XPath предоставит вам все узлы с атрибутами, содержащими 'Foo', независимо от имени узла или имени атрибута:

//attribute::*[contains(., 'Foo')]/..

Конечно, если вас больше интересует содержимое самого атрибута , и не обязательно их родительский узел, просто отбросьте / ..

//attribute::*[contains(., 'Foo')]
22
ответ дан 23 November 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: