¿Cómo resuelvo el error "La expresión debe evaluar a un conjunto de nodos" al verificar la existencia de un nodo?
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.
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!