2016-03-23 14 views
0

Ich habe diesen Code in C#, ich brauche ein Cube Knoten zu erhalten, aber meine Liste der Knoten ist leer ..C# wählen Sie Knoten aus XML

string url = @"http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"; 
XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(url); 

XmlNamespaceManager manager = new XmlNamespaceManager(xmlDoc.NameTable); 
manager.AddNamespace("gesmes", "http://www.gesmes.org/xml/2002-08-01"); 

XmlNodeList nodes = xmlDoc.SelectNodes("/gesmes:Envelope/Cube", manager); 

Was mache ich falsch?

Antwort

2

Es gibt einen Standardnamespace http://www.ecb.int/vocabulary/2002-08-01/eurofxref, den Sie registrieren müssen, um auf das Element Cube zuzugreifen.

Andernfalls versucht der XPath-Ausdruck ein un-Namens-Cube-Element zu finden, das nicht im Dokument vorhanden ist. XPath hat kein Konzept für einen Standardnamespace.

string url = @"http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"; 
XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(url); 

XmlNamespaceManager manager = new XmlNamespaceManager(xmlDoc.NameTable); 
manager.AddNamespace("gesmes", "http://www.gesmes.org/xml/2002-08-01"); 
manager.AddNamespace("default", "http://www.ecb.int/vocabulary/2002-08-01/eurofxref"); 

XmlNodeList nodes = xmlDoc.SelectNodes("/gesmes:Envelope/default:Cube", manager); 

dies das Cube Kind unter direkt die gesmes:Envelope zugreifen. Je nachdem, was Sie erreichen möchten, können Sie stattdessen einen der folgenden XPath-Ausdrücke verwenden:

/gesmes:Envelope/default:Cube/default:Cube/default:Cube 
/gesmes:Envelope//default:Cube[@currency] 
/gesmes:Envelope//default:Cube[@time]/default:Cube 
Verwandte Themen