【问题标题】:trying to read xml from a specified url yields no xml results尝试从指定的 url 读取 xml 不会产生 xml 结果
【发布时间】:2023-03-22 08:30:01
【问题描述】:

这个特定的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;

【问题讨论】:

    标签: c# asp.net xml-parsing


    【解决方案1】:

    看起来您应该为此使用 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

    【讨论】:

    • 干杯我迷路了(:我如何在这个 xml 上搜索美元 Lambada 样式?
    • @LoneXcoder 没有问题 - 请参阅我上面的编辑以查询美元元素。
    • 它不再工作了。我想这是为了让您访问,查看货币,明天请回来,如果您将再次访问我们或尝试使用此 xml 作为数据源,请拥有一个 coockie!
    【解决方案2】:

    有一种更简单的方法可以使用 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);
        }
    }
    

    【讨论】:

    • 首先,我要感谢您在该问题上尝试 chek 所付出的努力,即使在我最后的评论之后有一个公认的答案,谢谢我会尝试您的代码,我知道应该做一个工作,我感谢你的坚持,如果你设法帮助克服一个精心策划的网站的安全技巧,我会通知你。
    • 没有成功(:我可以尝试访问另一个不关心作为数据源访问的站点,我的代码工作了一段时间,我猜他们很担心,看起来像是一种攻击,所以有两个选项,另一个站点,或以编程方式下载文件,无论在 dot net 中可用哪种技术,控制台 webforms winforms 我想如果你只是以人的身份进行操作,下载数据在 sql 中存储相关值是可能的DB然后使用DB,所以我只需要知道如何下载网站页面内容,就好像它是手动完成的一样,我们是否只是使用Web客户端以便最接近手动下载?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    相关资源
    最近更新 更多