使用c#XML将复杂的XML解析为linq

使用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();

我是解析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();

        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;