gpt4 book ai didi

c# - 使用 Linq 从 Xml 获取特定节点

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:51 24 4
gpt4 key购买 nike

我想使用 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>

所以我想在日期参数等于日期的立方体上定位。然后我想控制货币等于“EUR”的汇率值。我正在尝试使用 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

最佳答案

看来您需要命名空间。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication55
{
class Program
{
static void Main(string[] args)
{
string url = "http://www.bnr.ro/files/xml/years/nbrfxrates2017.xml";

XDocument systemXml = XDocument.Load(url);
XNamespace ns = ((XElement)systemXml.FirstNode).GetDefaultNamespace();

DateTime date = DateTime.Parse("2017-01-05");
var results = systemXml.Descendants(ns + "Cube")
.Where(x => ((DateTime)x.Attribute("date") == date))
.Descendants(ns + "Rate")
.Where(x => (string)x.Attribute("currency") == "EUR")
.FirstOrDefault();
var value = (decimal)results;

}
}

}

关于c# - 使用 Linq 从 Xml 获取特定节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43920578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com