Como posso resolver o erro “expressão deve ser avaliada como um nó-set” ao verificar a existência de um nó?
Pergunta
Eu estou tentando verificar a existência de um nó usando o seguinte código NET:
xmlDocument.SelectSingleNode(
String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));
Esta sempre levanta:
XPathException: Expressão deve ser avaliada como um conjunto de nós.
Por que estou recebendo este erro e como posso resolver isso? Obrigado.
Solução
A expressão dada avalia a um boolean, e não um conjunto de nós. Eu suponho que você quer verificar se o ProjectName é igual ao texto parametrizada. Neste caso, você precisa escrever
//ErrorTable/ProjectName[text()='{0}']
Isto dá-lhe uma lista de todos os nós (um conjunto de nós) correspondentes a condição dada. Esta lista pode ser vazia, caso em que o C # -Expression na sua amostra retornará null.
Como um adendo: Você pode usar a expressão XPath original, mas não com SelectSingleNode, mas com Avaliar, como este:
(bool)xmlDocument.CreateNavigator().Evaluate(String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));
Outras dicas
Tente:
Node node = xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName = '{0}'", projectName));
if (node != null) {
// and so on
}
Edit: erro bobo
A expressão XPath continha um erro sutil. Deveria ter sido:
xmlDocument.SelectSingleNode(String.Format("//ErrorTable/ProjectName[text()='{0}']", projectName));
A expressão anterior estava avaliando a um boolean, o que explica o erro de excepção. Obrigado pela ajuda!