C# 从XML文档获取节点值

C# 从XML文档获取节点值,c#,xml,parsing,C#,Xml,Parsing,我的代码看起来像这样,我想打印货币的价值,但我不知道我错在哪里 XmlDocument xdoc = new XmlDocument(); xdoc.Load("filepath"); XmlNodeList nodes = xdoc.SelectNodes("//gesmes/gesmes"); foreach (XmlNode node in nodes) { Console.WriteLine(node["currency"]); } 我的Xml文档如下所示 参考利率 欧洲中央

我的代码看起来像这样,我想打印货币的价值,但我不知道我错在哪里

XmlDocument xdoc = new XmlDocument();
xdoc.Load("filepath");
XmlNodeList nodes = xdoc.SelectNodes("//gesmes/gesmes");

foreach (XmlNode node in nodes)
{
   Console.WriteLine(node["currency"]);
}
我的Xml文档如下所示

参考利率
欧洲中央银行

您的代码有多处错误:

名称空间 您必须添加名称空间管理器并添加在xml中定义的名称空间

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);
nsmgr.AddNamespace("gesmes", "http://www.gesmes.org/xml/2002-08-01");
nsmgr.AddNamespace("lo", "http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
注意我是如何添加带有
lo
别名的默认名称空间的,以便以后能够使用XPath查询它

XPath 您想选择什么?
gesmes
是文档中的名称空间,而不是您可以选择的节点。根据您的问题,我猜您希望选择包含货币属性的多维数据集,如下所示:

XmlNodeList nodes = xdoc.SelectNodes("//lo:Cube[@currency]", nsmgr);
请注意,您需要包括名称空间管理器

价值 您要查找的值不是
节点值

<Cube currency="USD">1.3518</Cube>
拼凑
你有没有改变来复习我的答案?如果它帮助你,请考虑将它标记为已接受的答案。
<Cube currency="USD">1.3518</Cube>
node.Attributes["currency"].Value;
XmlDocument xdoc = new XmlDocument();
xdoc.Load("filepath");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);
nsmgr.AddNamespace("gesmes", "http://www.gesmes.org/xml/2002-08-01");
nsmgr.AddNamespace("lo", "http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
XmlNodeList nodes = xdoc.SelectNodes("//lo:Cube[@currency]", nsmgr);

foreach (XmlNode node in nodes)
{
    Console.WriteLine(node.Attributes["rate"].Value);
}

Console.ReadKey();