Как устранить ошибку «Выражение должно иметь значение набора узлов» при проверке существования узла?
Вопрос
Я пытаюсь проверить существование узла, используя следующий код .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));
Предыдущее выражение оценивало логическое значение, что объясняет ошибку исключения.Спасибо за помощь!