使用来自欧洲中央银行的URL:
www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml
我想将货币符号和汇率导入词典或对象。我已经将其读入xml文档,但是在选择节点属性时遇到了麻烦。
谢谢
string xmlString;
using (var client = new WebClient())
{
xmlString = client.DownloadString("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
}
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlString);
foreach(XmlNode node in xmlDoc.SelectNodes("//*/Cube/@currency"))
{
// add currency and rate to dictionary
}
答案 0 :(得分:4)
我认为问题出在您的xPath选择器上。
值为"//*[@currency]"
将选择所有属性为“货币”的元素
class Program
{
public static void Main(string[] args)
{
List<Rate> rates = new List<Rate>();
var doc = new XmlDocument();
doc.Load(@"http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
XmlNodeList nodes = doc.SelectNodes("//*[@currency]");
if (nodes != null)
{
foreach (XmlNode node in nodes)
{
var rate = new Rate()
{
Currency = node.Attributes["currency"].Value,
Value = Decimal.Parse(node.Attributes["rate"].Value, NumberStyles.Any, new CultureInfo("en-Us"))
};
rates.Add(rate);
}
}
}
}
class Rate
{
public string Currency { get; set; }
public decimal Value { get; set; }
}
答案 1 :(得分:1)
irb(main):002:0>driver = watir::Browser.new :chrome
NameError: undefined local variable or method `watir' for main:Object
from (irb):2
from C:/Ruby24-x64/bin/irb.cmd:19:in `<main>'
答案 2 :(得分:1)
如果XPath表达式不包含前缀,则假定名称空间URI为空名称空间。如果XML包含默认名称空间,则仍必须向XmlNamespaceManager添加前缀和名称空间URI。否则,您将不会选择任何节点。
使用此重载XmlNode.SelectNodes(String, XmlNamespaceManager)。
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("ecb", "http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
foreach (XmlNode node in xmlDoc.SelectNodes("//ecb:Cube[@currency]", nsmgr))
答案 3 :(得分:0)
class Program
{
static void Main(string[] args)
{
List<Rate> rates = new List<Rate>();
var doc = new XmlDocument();
doc.Load(@"http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
XmlNodeList nodes = doc.SelectNodes("/*/*/*/*");
for (int i = 0; i < nodes.Count; i++)
{
var rate = new Rate()
{
Currency = nodes[i].Attributes[0].Value,
Value = Decimal.Parse(nodes[i].Attributes[1].Value)
};
rates.Add(rate);
}
Console.WriteLine();
}
}
class Rate
{
public string Currency { get; set; }
public decimal Value { get; set; }
}