-5

我有以下 url,它在 c# 中返回我的 XML 响应: http ://www.bnr.ro/files/xml/years/nbrfxrates2017.xml

现在,我想为我的日期检索欧元货币,该日期在我的函数中作为参数出现。我想使用 Linq 但我有一些问题

我的功能:

public static void  getXml(String year, String data)
        {
            WebClient webClient = new WebClient();
            string url = "http://www.bnr.ro/files/xml/years/nbrfxrates" + year + ".xml";
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(response.GetResponseStream());
            XElement xe = XElement.Load(response.GetResponseStream());
            var x = (from e in xe.Elements("Cube")
                     where e.Attribute("date").Value.Equals(data)
                     select e.Element("Rate") into p
                     where p.Element("currency").Value.Equals(data)
                     select p.Value);


            Console.WriteLine(x.ToString());


        }

我的错误是:

XElement xe = XElement.Load(response.GetResponseStream()); 上缺少根元素

4

1 回答 1

1

方法GetResponseStream返回一个流:

获取用于从服务器读取响应正文的流。

您不能两次读取此流。当您加载XmlDocument它时,它会从网络流中读取数据并关闭它以释放连接。当您尝试XElement从关闭的流中加载时,您会收到错误消息。

您应该只读取一次响应流 - 例如到字符串或 MemoryStream:

string xml;
using(var reader = new StreamReader(r.GetResponseStream()))
    xml = reader.ReadToEnd();

XmlDocument注意:如果您使用 linq to xml,尚不清楚为什么需要。

于 2017-05-11T14:34:16.583 回答