使用c#XML将复杂的XML解析为linq
我是解析XML文档的新手。 我要解析以下XML文档: 然后得到你的价格 目前我正在使用以下代码:使用c#XML将复杂的XML解析为linq,c#,xml,visual-studio,linq,C#,Xml,Visual Studio,Linq,我是解析XML文档的新手。 我要解析以下XML文档: 然后得到你的价格 目前我正在使用以下代码: XDocument xDoc = XDocument.Load("http://www.petrol.eu/api/fuel_prices.xml"); var list = xDoc.Descendants("country").Where(t => t.Attribute("label").Value=="Slovenia").ToList();
XDocument xDoc = XDocument.Load("http://www.petrol.eu/api/fuel_prices.xml");
var list = xDoc.Descendants("country").Where(t => t.Attribute("label").Value=="Slovenia").ToList();
foreach (var country in list)
{
var s95 = country.Elements("pricetype").First(p => p.Attribute("type").Value == "price").Value;
txtBVnosi.Text = s95;
}
我知道代码是错误的。我现在有点不知所措,因为我不知道如何正确地计算出价格,因为这是一个非常复杂的结构化XML,我发现的所有其他问题都是关于更简单的XML文件。您首先需要查看
fuel
元素以检索价格
要获得每种燃油的所有价格,我建议使用字典
:
Dictionary<string, string> prices = new Dictionary<string, string>();
foreach (var fuel in country.Elements("fuel"))
{
prices.Add(
fuel.Attribute("type").Value,
fuel.Element("priceType").Elements().First(p => p.Attribute("type").Value == "price").Value);
}
但由于我猜测(基于代码中变量的名称),您希望获得95型燃油的价格,因此此查询也可以:
var s95 = country.Elements("fuel")
.First(f => f.Attribute("type").Value == "95")
.Element("priceType")
.Elements()
.First(p => p.Attribute("type").Value == "price").Value;
使用xml模式(生成xsd)并解析它。或者你可以使用这个[link]@sushmitgos,这并不能解决OP的问题。XML没有格式错误或无效,他只是没有找到任何元素。@SebastianHofmann。。啊,对了!!
var s95 = country.Elements("fuel")
.First(f => f.Attribute("type").Value == "95")
.Element("priceType")
.Elements()
.First(p => p.Attribute("type").Value == "price").Value;