Как устранить ошибку «Выражение должно иметь значение набора узлов» при проверке существования узла?

StackOverflow https://stackoverflow.com/questions/157044

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

XPathException:Выражение должно возвращать набор узлов.

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

Пытаться:

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top