1

XMLファイルからテキストボックスに文字列を追加しようとしていますが、まだ成功していません。「date」要素を調べて、「bejovo」が「date」要素と一致する場合は、要素「name」の値をリストに入れ、価格を合計します。これが私のコードです。

if (File.Exists(path))
            {
                XDocument doc = XDocument.Load(path);
                var c = from x in doc.Descendants("order")
                        where x.Element("date").Value == bejovo
                        select new
                        {
                            //??
                        };
                foreach (var item in c)
                {
                    textBox1.Text = item.ToString();                    
                }
            }

そして、これが私のXMLファイルです。

<user id="0">
    <order id="0">
      <date>2012.11.20. 1:29:20</date>
      <menuelem db="0">
        <name>Pizza</name>
        <price>1290</price>
      </menuelem>
      <menuelem db="1">
        <name>Coke</name>
        <price>300</price>
      </menuelem>
    </order>
  </user>
<user id="0">
    <order id="1">
      <date>2012.11.19. 21:49:29</date>
      <menuelem db="0">
        <name>Milk</name>
        <price>200</price>
      </menuelem>
    </order>
  </user>

したがって、bejovo = "2012.11.20。1:29:20"の場合、結果は「ピザ」と「コーラ」である必要があり、価格は1590です。

4

2 に答える 2

0

確かに、このコードには検証がありません。

XDocument doc = XDocument.Load("In.xml");
var c = from x in doc.Descendants("order")
        where x.Element("date").Value == "2012.11.20. 1:29:20"
        select new
        {
            Names = string.Join(", ", x.Elements("menuelem")
                                       .Elements("name")
                                       .Select(s => s.Value)),
            Price = x.Elements("menuelem")
                     .Elements("price")
                     .Select(s => decimal.Parse(s.Value))
                     .Sum()
        };
foreach (var item in c)
{
    textBox1.Text = string.Format("{0}\tprice:{1}", item.Names, item.Price);
}

出力は次のようになります。Pizza, Coke price:1590

于 2012-11-20T02:26:15.870 に答える
0

これらの線に沿って何かを試みるかもしれません。以下のコードはテストされておらず、現時点ではVisualStudioにロードしてテストすることはできません。

var items = doc
   .Elements("user")
   .Elements("order")
   .Where(o => (string)o.Element("date") == bejovo)
   .Elements("menuelem")
   .Select(m => new 
   { 
     Name = (string)m.Element("name"), 
     Price = (int?).Element("price") 
   };
var names = items.Select(i => i.Name).ToList();
var price = items.Select(i => i.Price).Sum();
于 2012-11-20T02:29:03.553 に答える