Необработанное исключение: System.Xml.XPath.XPathException: выражение должно оценивать набор узлов - PullRequest
1 голос
/ 13 ноября 2010

Я пытаюсь выбрать все узлы с атрибутом, равным чему-то, я получил ошибку в заголовке.

Моя строка Xpath выглядит как //@[id=****], кто-нибудь знает, что случилось?

Ответы [ 2 ]

4 голосов
/ 13 ноября 2010

Ваше выражение XPath, вероятно, должно быть:

//*[@id='something']

Это означает, что соответствует всем элементам, атрибуты id которых равны something, в любом месте документа .

РЕДАКТИРОВАТЬ: Если вам нужны сами атрибуты id, а не их родительские элементы, вы можете использовать:

//*[@id='something']/@id

Или даже лучше, как @Dimitre Novatchev предложил:

//@id[. = 'something']
0 голосов
/ 13 ноября 2010

Я пытаюсь выбрать все узлы с атрибут, равный чему-то, я получил ошибка в заголовке.

Моя строка Xpath выглядит //@[id=****], кто-нибудь знает, что неправильно?

Много вопросов с этим выражением:

0,1. //@[some-condition] Предикат может применяться только к выбранным узлам, но //@ не выбирает ни одного узла. @ - это сокращение от attribute::, и это незаконченный тест узла. Здесь отсутствует тип узла или имя узла.

Что было бы правильно: //@*[some-condition] или //@attrName[some-condition]

0,2. id=**** синтаксически недопустим, если ** не является действительным выражением XPath. Я предполагаю, что вы хотите получить все атрибуты со значением, равным некоторому известному, буквальному значению. В любом таком случае используется синтаксис id='someLiteral - обратите внимание на одинарные кавычки (они также могут быть двойными), окружающие буквальное значение.

Решение

//*[@id='something']

Это выбирает все элементы в документе XML, которые имеют атрибут id со значением 'something'.

//@id[. = 'something']

Выбирает все атрибуты с именем id в документе XML, значение которых 'something'.

//@*[. = 'something']

Выбирает все атрибуты в документе XML (независимо от их имени), значение которых 'something'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...