¿Cómo resuelvo el error "La expresión debe evaluar a un conjunto de nodos" al verificar la existencia de un nodo?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Estoy intentando verificar la existencia de un nodo con el siguiente código .NET:

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

Esto siempre plantea:

  

XPathException: la expresión debe evaluar a un conjunto de nodos.

¿Por qué recibo este error y cómo puedo resolverlo? Gracias.

¿Fue útil?

Solución

La expresión dada se evalúa como un booleano, no un conjunto de nodos. Supongo que desea comprobar si ProjectName es igual al texto parametrizado. En este caso necesitas escribir

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

Esto le proporciona una lista de todos los nodos (un conjunto de nodos) que coinciden con la condición dada. Esta lista puede estar vacía, en cuyo caso la expresión C # en su muestra devolverá un valor nulo.

Como una idea de último momento: puede usar la expresión xpath original, pero no con SelectSingleNode, pero con Evaluate, como esto:

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

Otros consejos

Prueba:

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

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

Editar: error tonto

La expresión XPath contenía un error sutil. Debería haber sido:

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

La expresión anterior estaba evaluando a un valor booleano, lo que explica el error de excepción. Gracias por la ayuda!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top