C# 使用 LINQ to XML 读取 XML 值
C# reading XML values using LINQ to XML
我创建了一个读取第三方 XML 文档的函数,以获取任何给定日期的欧元到英镑的兑换率,但是我的 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;
请有人帮我弄清楚我在这里遗漏了什么,
干杯。
您必须允许 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()
;
我创建了一个读取第三方 XML 文档的函数,以获取任何给定日期的欧元到英镑的兑换率,但是我的 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;
请有人帮我弄清楚我在这里遗漏了什么,
干杯。
您必须允许 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()
;