Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
//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.:)
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 при помощи положения () функция.
Имейте Вас, попробовал что-то как:
//[содержит (@prop, "Нечто")]
, я никогда не использовал, содержит функцию прежде, но подозревайте, что это должно работать, как рекламируется...
John C является самым близким, но XPath чувствителен к регистру, таким образом, корректный XPath был бы:
/bla/a[contains(@prop, 'Foo')]
Для кода выше...//* [содержит (@prop, 'нечто')]
попробуйте это:
//[содержит (@prop, 'нечто')]
, который должен работать на любые теги "a" в документе
Этот XPath предоставит вам все узлы с атрибутами, содержащими 'Foo', независимо от имени узла или имени атрибута:
//attribute::*[contains(., 'Foo')]/..
Конечно, если вас больше интересует содержимое самого атрибута , и не обязательно их родительский узел, просто отбросьте / ..
//attribute::*[contains(., 'Foo')]