我创建了一个函数来读取第三方XML文档,以便在任何给定日期获得欧元到GBP的转换率,但是我的linq查询返回空值。
XML:
<therate xmlns="http://somecurrencysite.com">
<terms>someValue</terms>
<from>EUR</from>
<amount>1.0</amount>
<timestamp>2001-05-01T06:00:00Z</timestamp>
<to>
<rate>
<currency>GBP</currency>
<dayrate>0.619887217</dayrate>
</rate>
</to>
</therate>
C#:
var uri = "http://somecurrencysite.com?date=" + date.ToString("yyyy-MM-dd") + "&to=GBP";
decimal rate;
using (var client = new WebClient())
{
client.Credentials = new NetworkCredential("userName", "passWord");
try
{
var source = new MemoryStream(client.DownloadData(uri));
var xRdr = new XmlTextReader(source);
rate = XDocument.Load(xRdr)
.Descendants("rate")
.Select(e => (decimal)e.Element("dayrate"))
.FirstOrDefault();
}
catch (Exception ex)
{
Err.ErrMsg(ex);
throw;
}
}
return rate;
请有人帮我弄清楚我在这里失踪了什么,
干杯。
答案 0 :(得分:1)
您必须允许XML命名空间恐怖:
XNamespace ns = "http://somecurrencysite.com";
var rate = XDocument.Load(xRdr)
.Descendants(ns + "to")
.Descendants(ns + "rate")
.Descendants(ns + "dayrate")
.Select(dr => Convert.ToDecimal(dr.Value))
.FirstOrDefault()
;