尝试从指定的URL读取xml不会产生xml结果

时间:2012-11-16 00:07:18

标签: c# asp.net xml-parsing

此特定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;

2 个答案:

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

如需了解更多信息,请阅读LINQ to XML on MSDN

答案 1 :(得分: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);
    }
}