2009-09-24 10 views
9

J'utilise .Net 2.0, et j'ai besoin de SelectSingleNode de mon XmlDocument indépendamment de l'espace de noms, aussi mal dirigé que cela puisse paraître.SelectSingleNode sans espace de noms

être spécifique

XmlElement slipType = (XmlElement)document.SelectSingleNode("//Provenance1"); 

sera mis slipType à null depuis que je sais don'l e namespace Provenance1 est au moment de la requête.

Répondre

22

Vous pouvez vérifier les local-name de l'élément et ignorer l'espace de noms avec l'expression XPath suivante:.

//*[local-name()='Provenance1'] 
+0

Un autre exemple de compliquer les choses les plus simples par les soi-disant programmeurs de Microsoft. – TomeeNS

0

Essayez:

XmlElement slipType = (XmlElement)document.SelectSingleNode("//*:Provenance1"); 

Ou:

XmlElement slipType = (XmlElement)document.SelectSingleNode("//@*:Provenance1"); 

pour les attributs ...

Malheureusement, cette construction ne fonctionnerait avec XPath 2.0, alors que .NET utilise uniquement XPath 1.0. Je l'ai testé par mégarde code ci-dessus avec un analyseur 2.0, donc il ne fonctionne pas)

+0

Cela jette une XPathException // *: Provenance1 a un jeton invalide. –

+0

Je l'ai testé avec .NET 3.5, où il s'est écrasé aussi. Cependant, il s'agit d'une construction XPath valide. Malheureusement pour XPath 2.0, que j'avais testé. Mais .NET utilise uniquement XPath 1.0 et il est peu probable .NET prendra en charge 2.0 ... –

Questions connexes