2009-09-24 11 views
9

Sto usando .Net 2.0 e ho bisogno di SelectSingleNode dal mio XmlDocument indipendentemente dallo spazio dei nomi, in quanto errato potrebbe sembrare.SelectSingleNode senza namespace

per essere precisi

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

imposterà slipType su null quando ho don'l so esimo namespace Provenance1 è al momento della query.

risposta

22

È possibile controllare il local-name dell'elemento e ignorare spazio dei nomi con la seguente espressione XPath:.

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

Un altro esempio di complicazioni delle cose più semplici da parte dei cosiddetti programmatori di Microsoft. – TomeeNS

0

Prova:

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

Oppure:

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

per gli attributi ...

Purtroppo, questa costruzione potrebbe funzionare solo con XPath 2.0, mentre .NET utilizza solo XPath 1.0. Ho accidentalmente provato sopra il codice con un parser 2.0, quindi non funziona)

+0

Questo genera XPathException // *: Provenienza1 ha un token non valido. –

+0

L'ho provato con .NET 3.5, dove si è bloccato anche. Tuttavia, è una costruzione XPath valida. Sfortunatamente per XPath 2.0, che avevo testato. Ma .NET utilizza solo XPath 1.0 ed è improbabile che .NET supporterà 2.0 ... –