此特定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;
答案 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);
}
}