C#从XML中选择节点

时间:2016-03-23 07:00:59

标签: c# xml

我在C#中有这个代码,我需要获得Cube个节点,但我的节点列表是空的。

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

我做错了什么?

1 个答案:

答案 0 :(得分: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