Подтвердить что ты не робот

Как устранить ошибку "Выражение должно оцениваться до node -set" при проверке наличия node?

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

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

Это всегда поднимается:

XPathException: выражение должно оцениваться в node -set.

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Try:

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

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

Изменить: глупая ошибка

Ответ 3

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

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

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