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から特定の値を取得したいと思います。異なるショップから同じ日のすべてのMoney値を取得したい。単一のショップ(ShopA)からのみ日とお金の値を取得できます。

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

しかし、適切なコーディングで同じ日付の異なるショップからすべてのMoney値を取得する方法がわかりません。

それらすべてを取得する方法を教えていただけますか?

前もって感謝します

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

または、1日のクエリではなく、すべての日のデータを取得する場合は、次のようにします。

        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

次のような 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 に答える
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 に答える