繁体   English   中英

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

[英]Parse complicated XML with c# Xml to 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文件的。

您首先需要调查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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM