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

时间:2018-06-01 12:55:23

标签: c# xml visual-studio linq

在解析XML文档时,我是一个新手。 我有以下要解析的XML文档:http://www.petrol.eu/api/fuel_prices.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文件。

1 个答案:

答案 0 :(得分:0)

首先,您需要查看fuel元素以检索价格。

要获得每种燃料的所有价格,我建议使用Dictionary

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);
}

之后,您可以轻松获得具体价格:

var s95 = prices["95"];

但是,因为我猜(基于代码中变量的名称)你想得到燃料类型95的价格,这个查询也会起作用:

var s95 = country.Elements("fuel")
                 .First(f => f.Attribute("type").Value == "95")
                 .Element("priceType")
                 .Elements()
                 .First(p => p.Attribute("type").Value == "price").Value;