Como posso resolver o erro “expressão deve ser avaliada como um nó-set” ao verificar a existência de um nó?

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

  •  03-07-2019
  •  | 
  •  

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.

Foi útil?

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top