2016-03-23 3 views
0

У меня есть этот код в C#, мне нужно, чтобы получить Cube узлы, но мой список узлов пуст ..C# выберите узел из 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); 

Что я делаю неправильно?

ответ

2

Существует пространство имен по умолчанию http://www.ecb.int/vocabulary/2002-08-01/eurofxref, которое необходимо будет зарегистрировать для доступа к элементу Cube.

В противном случае выражение XPath пытается найти элемент с номером Cube, который не существует в документе. XPath не имеет понятия пространства имен по умолчанию.

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); 

это будет иметь доступ к Cube ребенка непосредственно под gesmes:Envelope. В зависимости от того, что вы хотите достичь, вы можете использовать одно из следующих выражений XPath:

/gesmes:Envelope/default:Cube/default:Cube/default:Cube 
/gesmes:Envelope//default:Cube[@currency] 
/gesmes:Envelope//default:Cube[@time]/default:Cube 
Смежные вопросы