Как устранить ошибку «Выражение должно оцениваться как набор узлов» при проверке существования узла? - PullRequest
12 голосов
/ 01 октября 2008

Я пытаюсь проверить наличие узла, используя следующий код .NET:

xmlDocument.SelectSingleNode(
        String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));

Это всегда вызывает:

XPathException: выражение должно вычисляться как набор узлов.

Почему я получаю эту ошибку и как ее устранить? Спасибо.

Ответы [ 3 ]

19 голосов
/ 01 октября 2008

Данное выражение оценивается как логическое значение, а не как набор узлов. Я предполагаю, что вы хотите проверить, соответствует ли ProjectName параметризованному тексту. В этом случае вам нужно написать

//ErrorTable/ProjectName[text()='{0}']

Это дает вам список всех узлов (набор узлов), соответствующих данному условию. Этот список может быть пустым, и в этом случае C # -выражение в вашем образце вернет ноль.

В качестве запоздалой мысли: вы можете использовать исходное выражение xpath, но не с SelectSingleNode, а с Evaluate, например:

(bool)xmlDocument.CreateNavigator().Evaluate(String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));
1 голос
/ 01 октября 2008

Выражение XPath содержало небольшую ошибку. Это должно было быть:

xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName[text()='{0}']", projectName));

Предыдущее выражение вычислялось как логическое значение, которое объясняет ошибку исключения. Спасибо за помощь!

1 голос
/ 01 октября 2008

Попробуйте:

Node node = xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName = '{0}'", projectName));

if (node != null) {
    // and so on
}

Редактировать: глупая ошибка

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