1

这个特定的url <-- (点击查看) 工作正常。

http://bankisrael.gov.il/currency.xml

但是当试图从中读取以提取货币时,无论我尝试哪种方式来解决它,这都是我得到的......

<html><body><script>document.cookie='iiiiiii=e0076bcciiiiiii_e0076bcc; path=/';window.location.href=window.location.href;</script></body></html>

尝试以下:

    using (WebClient c = new WebClient())
    {
        var result = c.DownloadString(@"http://bankisrael.gov.il/currency.xml");
    }

尝试过以上WebClient...但不是第一次尝试。

下一个代码是我的第一次尝试。我究竟做错了什么 ?

在“浏览”到上面的 URL 时,XML 就在那里。我想先在您的帮助下尝试一下,然后再拼命想其他方法。

我将能够将文件保存到我的硬盘驱动器(以编程方式),然后从硬盘驱动器中读取它。对于这种方法,我还没有测试过,但我相信它会起作用。

但我试图与一些有经验的开发人员核实,以尝试一下。有什么问题?

   string DollarURL = "http://bankisrael.gov.il/currency.xml";
   xx.Load(DollarURL);
   XmlNode root = xx;
4

2 回答 2

2

看起来您应该为此使用 Linq to XML。尝试XDocument.Load

var xdoc = XDocument.Load(DollarURL);

现在xdoc.Root会给你CURRENCIES元素:

Console.WriteLine(xdoc.Root.Name.LocalName); // "CURRENCIES"

用于xdoc.Root.Elements("CURRENCY")获取所有货币节点。用于xdoc.Save("filename")保存到硬盘。

要查询某种货币,可以这样写:

XElement[] usdElements = xdoc.Root.Elements("CURRENCY")
    .Where(currency => (string)currency.Element("CURRENCYCODE") == "USD")
    .ToArray();

有关更多信息,请阅读MSDN 上的 LINQ to XML

于 2012-11-16T00:18:13.710 回答
0

使用 XPath 访问 XML 节点有一种更简单的方法:

using System;
using System.Net;
using System.Xml;
using System.Globalization;

// ...    

using (WebClient c = new WebClient())
{
    string result = c.DownloadString(@"http://bankisrael.gov.il/currency.xml");
    CultureInfo culture = new CultureInfo("en-US");

    XmlDocument xml = new XmlDocument();
    xml.LoadXml(result);

    foreach (XmlNode currency in xml.SelectNodes("/CURRENCIES/CURRENCY"))
    {
        string name = currency.SelectSingleNode("NAME").InnerText;
        int unit = int.Parse(currency.SelectSingleNode("UNIT").InnerText);
        string currencyCode = currency.SelectSingleNode("CURRENCYCODE").InnerText;
        string country = currency.SelectSingleNode("COUNTRY").InnerText;
        double rate = double.Parse(currency.SelectSingleNode("RATE").InnerText, culture);
        double change = double.Parse(currency.SelectSingleNode("CHANGE").InnerText, culture);

        Console.WriteLine("{2} {0} ({3}, {5}) rate:{1} change:{4}", currencyCode, rate, unit, country, change, name);
    }
}
于 2012-11-16T00:45:09.930 回答