Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用LINQ到XML读取XML值_C#_Xml_Linq_Linq To Xml - Fatal编程技术网

C#使用LINQ到XML读取XML值

C#使用LINQ到XML读取XML值,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我创建了一个函数,该函数读取第三方XML文档以获取任何给定日期的欧元到英镑的转换率,但是我的linq查询返回的是空值 XML: 请有人帮我找出我在这里遗漏了什么 干杯。您必须考虑XML名称空间: XNamespace ns = "http://somecurrencysite.com"; var rate = XDocument.Load(xRdr) .Descendants(ns + "to") .Descendants(ns + "rate") .Descendan

我创建了一个函数,该函数读取第三方XML文档以获取任何给定日期的欧元到英镑的转换率,但是我的linq查询返回的是空值

XML:

请有人帮我找出我在这里遗漏了什么


干杯。

您必须考虑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()
    ;

非常感谢,感谢您的快速响应,如此简单的更改。在此之前,我使用的是GetElementsByTagName(“dayrate”)[0]。InnerText虽然工作正常,但我正在寻找一个更“优雅”的解决方案。干杯
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;
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()
    ;