当前位置: 首页 > 知识库问答 >
问题:

C#将XML汇率从ECB解析到字典中

寇桐
2023-03-14

使用来自欧洲央行的以下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
        }

共有3个答案

梁丘缪文
2023-03-14
        string xmlString;
        using (var client = new WebClient())
        {
            xmlString = client.DownloadString("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
        }

    var doc = XDocument.Parse(xmlString);
    XNamespace ns = "http://www.ecb.int/vocabulary/2002-08-01/eurofxref";
    var values = doc
        .Root
        .Element(ns + "Cube")             
        .Element(ns + "Cube")
        .Elements(ns + "Cube")
        .ToDictionary(e => e.Attribute("currency"), e => (double) e.Attribute("rate"));
姬捷
2023-03-14

如果XPath表达式不包含前缀,则假定名称空间URI为空名称空间。如果XML包含默认名称空间,则仍必须向XmlNamespaceManager添加前缀和名称空间URI;否则,将不会选择任何节点。

使用此重载XmlNode。选择节点(字符串,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))
祁通
2023-03-14

我认为问题在于xPath选择器。

值为“//*[@currency]”将选择属性为“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; }
}
 类似资料:
  • 我正在尝试使用欧洲中央银行(ECB)的当前汇率提要http://www.ECB.int/stats/eurofxref/eurofxref-daily.xml 他们提供了关于如何解析xml的文档,但没有一个选项对我有效:我检查了是否设置了allow_url_fopen=on。 http://www.ecb.int/stats/exchange/eurofxref/html/index.en.htm

  • 问题内容: 我试图解析一个字符串,以分隔字符串中的列表。我目前有字符串: 有什么方法可以解析字符串,以便字典键是列表的第一个元素,而键的值是元素的下一个。例如: 问题答案: insted的的,你可以有列表: 您可以使用从字符串解析Python数据结构

  • 问题 你想使用一个Python字典存储数据,并将它转换成XML格式。 解决方案 尽管 xml.etree.ElementTree 库通常用来做解析工作,其实它也可以创建XML文档。 例如,考虑如下这个函数: from xml.etree.ElementTree import Element def dict_to_xml(tag, d): ''' Turn a simple dict of ke

  • 本文向大家介绍Python字典推导式将cookie字符串转化为字典解析,包括了Python字典推导式将cookie字符串转化为字典解析的使用技巧和注意事项,需要的朋友参考一下 cookie: PHPSESSID=et4a33og7nbftv60j3v9m86cro; Hm_lvt_51e3cc975b346e7705d8c255164036b3=1561553685; Hm_lpvt_51e3cc

  • 本文向大家介绍Objective-C语言XML解析,包括了Objective-C语言XML解析的使用技巧和注意事项,需要的朋友参考一下

  • 问题内容: 我有一个XML文件,例如 如何将其解析为JSON结构文件? 问题答案: 对于一个简单的解决方案,我建议使用Jackson库,它是一个Java库,用于生成和读取带有XML扩展名的JSON,因为它只需几行简单的代码就可以将任意复杂的XML转换为JSON。 input.xml Java代码: 该演示使用Jackson 1.7.7 (较新的1.7.8也可以使用),Jackson XML Dat