【发布时间】:2017-05-11 16:06:04
【问题描述】:
我想使用 Linq 从我的 XML 响应中获取特定节点 我的 XML:
<DataSet xmlns="http://www.bnr.ro/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bnr.ro/xsd nbrfxrates.xsd">
<Header>
<Publisher>National Bank of Romania</Publisher>
<PublishingDate>2016-12-30</PublishingDate>
<MessageType>DR</MessageType>
</Header>
<Body>
<Subject>Reference rates</Subject>
<OrigCurrency>RON</OrigCurrency>
<Cube date="2016-01-04">
<Rate currency="AED">1.1272</Rate>
<Rate currency="EUR">4.5169</Rate>
<Rate currency="BGN">2.3094</Rate>
<Rate currency="HUF" multiplier="100">1.4320</Rate>
<Rate currency="INR">0.0622</Rate>
<Rate currency="JPY" multiplier="100">3.4798</Rate>
<Rate currency="KRW" multiplier="100">0.3481</Rate>
<Rate currency="MDL">0.2107</Rate>
</Cube>
<Cube>
...
</Cube>
</Body>
</DataSet>
所以我想定位在日期等于日期参数的立方体上。然后我想限制货币等于“欧元”的汇率值。 我正在尝试使用 Linq 执行此操作,但它不起作用 我的 Linq 代码:
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;
XDocument systemXml = XDocument.Load(response.GetResponseStream());
XElement cube = (from cubeElement in systemXml.Elements("Cube")
where cubeElement.Attribute("date").ToString().Equals(data)
select cubeElement).Single();
XElement rate = (from rateElement in cube.Elements("Rate")
where rateElement.Attribute("currency").ToString().Equals("EUR")
select rateElement).Single();
我的问题是systemXml.Elements("Cube") 返回null。
这是我的网络请求网址http://www.bnr.ro/files/xml/years/nbrfxrates2017.xml
【问题讨论】:
-
@NemanjaPerovic 好的,我明白了,但我对那个 null 有疑问 :(,抱歉,如果我写错了..
-
没问题。尝试后代而不是元素。要了解原因,请查看文档或我添加的链接
-
您的 XML 文件格式不正确,您缺少很多结束标记。更正它,以便我们能够帮助您
-
@S.Petrosov bnr.ro/files/xml/years/nbrfxrates2017.xml,这是我的整个 xml 文件