2009-09-03 5 views
1

J'ai un XPathNavigator à la racine d'un document. À plusieurs niveaux, il y a un groupe de valeurs numériques que je veux additionner. Je pourrais toujours faire une boucle sur les nœuds et les ajouter moi-même, mais comme je savais que la spécification XPath incluait une fonction de somme, j'ai décidé d'essayer de l'utiliser. Je cours dans une erreur.Puis-je utiliser les fonctions XPath avec XPathNavigator?

System.Xml.XPath.XPathException - Expression must evaluate to a node-set. 

Voici mon code.

XPathDocument doc = new XPathDocument(new StringReader(myLiteralXML)); 
XPathNavigator nav = doc.CreateNavigator(); 
string myXPath = "sum(/root/level1/level2/elementsToAdd)"; 
XPathNavigator sumNode = nav.SelectSingleNode(myXPath); 

Je me attendais sumNode.Value me donner ma somme (sous forme de chaîne). Mais à la place, je reçois l'exception ci-dessus lorsque j'essaie de remplir sumNode.

Je sais que mon XPath est valide (ou du moins que XMLSpy le dit). Est-ce que je ne peux pas utiliser les fonctions XPath sur un XPathNavigator? Est-ce que je le fais juste mal?

(Aussi, curieux, suis-je perdre mon temps sur une approche impasse personne ne l'aide, et risquer de ne pas être en mesure de comprendre un an ce que cela fait?)

Répondre

6

Essayez ceci:

XPathNavigator sumNode = nav.Evaluate(myXPath); 

la méthode XPathNavigator.Evaluate est définie comme:

évalue l'expression XPath spécifié et renvoie le résultat typé.

par opposition à la méthode XPathNavigator.SelectSingleNode qui est conçue pour renvoyer uniquement les nœuds.

+0

Je ne savais pas que c'était là. Merci. –

Questions connexes