1

我正在尝试将 XML 文件中的字符串添加到文本框,但还没有成功。我想要做的是通过“日期”元素,如果“bejovo”与“日期”元素匹配,那么将元素“名称”值放入列表中,并对价格求和。这是我的代码。

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",那么我的结果一定是“Pizza”和“Coke”,价格是1590。

4

2 回答 2

0

可能会尝试这些方面的东西。下面的代码未经测试,目前无法在 Visual Studio 中加载和测试。

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 回答
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 回答