2
<Area>
 <ShopA>
  <Income Day="1" Money="100" />
  <Income Day="2" Money="90" />
  <Income Day="3" Money="80" />
  <Income Day="4" Money="70" />
 </ShopA>
 <ShopB>
  <Income Day="3" Money="50" />
  <Income Day="4" Money="40" />
 </ShopB>
</Area>

您好我想通过使用 XDocument 从上面的 XML 中获取特定值。我想从不同的商店获得所有具有相同Day的Money值。我只能从单个 Shop (ShopA) 中获取 Day 和 Money 值。

XDocument doc = XDocument.Load(xmlFileName.xml);
var areaName = doc.Root.Elements("Area");
IEnumerator<XElement> s = areaName.Elements("ShopA").GetEnumerator();
While (s.MoveNext())
{
 var day = s.Current.Attribute("Day").Value;
 var money = s.Current.Attribute("Money").Value;
}

但我不知道如何从具有相同日期且编码正确的不同商店获取所有货币值。

你能帮我弄清楚如何得到它们吗?

提前致谢

4

3 回答 3

1

大概是这样的吧?

    var doc = XDocument.Load("XMLFile1.xml");
    var q =
        doc.Root
           .Elements()
           .Elements()
           .Where(e => e.Attribute("Day").Value == "3")
           .Select(e => new
                            {
                                Shop = e.Parent.Name, 
                                Money = e.Attribute("Money").Value
                            });
    foreach (var e in q)
    {
        Console.WriteLine("{0} {1}", e.Shop, e.Money);
    }

或者,如果您想获取所有天的数据而不是查询一天:

        var doc = XDocument.Load("XMLFile1.xml");
        var q =
            doc.Root
               .Elements()
               .Elements()
               .Select(e => new
                                {
                                    Day = e.Attribute("Day").Value,
                                    Shop = e.Parent.Name, 
                                    Money = e.Attribute("Money").Value
                                })
               .GroupBy(r => r.Day);
        foreach (var e in q)
        {
            Console.WriteLine("Day: {0}", e.Key);
            foreach (var i in e)
            {
                Console.WriteLine("{0} {1}", i.Shop, i.Money);
            }
        }
于 2012-10-16T00:48:44.183 回答
0

尝试这样的事情:

<Area>
<ShopA>
 <Income Day="1" Money="100" />
 <Income Day="2" Money="90" />
 <Income Day="3" Money="80" />
 <Income Day="4" Money="70" />
</ShopA>
<ShopB>
 <Income Day="3" Money="50" />
 <Income Day="4" Money="40" />
</ShopB>
</Area>

var moneyDayResultSet = from Income in doc.Descendants("Income")
       select new { 
           Money = Income.Attribute("Money").Value,
           Day = Income.Attribute("Day").Value
       };


//Loop through results
foreach (var moneyDayResult in moneyDayResultSet){
    if(moneyDayResult.Day == 3)
{
    Console.Write(moneyDayResult.Money);
}

}
于 2012-10-16T00:42:28.270 回答
0

您可以在某一天使用 XPath 获得商店中的所有资金,例如:

XElement root = XElement.Load(file);
string day = "2";
var shops = root.XPathSelectElements(
    string.Format("//Income[@Day='{0}']", day))
    .Select(x => new
    {
        Shop = x.Parent.LocalName,
        Money = x.Attribute("Money").Value
    });

.Net 中的 XPath 使用以下方法找到:

使用 System.Xml.XPath;

于 2012-10-16T17:04:37.657 回答