C#使用LINQ to XML读取XML值

时间:2017-12-07 16:36:35

标签: c# xml linq linq-to-xml

我创建了一个函数来读取第三方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;

请有人帮我弄清楚我在这里失踪了什么,

干杯。

1 个答案:

答案 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()
    ;