如果条件为真,则从xml向文本框添加指定的元素

时间:2012-11-20 02:15:26

标签: c# xml linq-to-xml

我正在尝试将XML文件中的字符串添加到文本框中,但尚未成功。我想要做的是查看“日期”元素,如果“bejovo”与“日期”匹配元素,然后将元素“名称”值放在List中,并将价格加起来。这是我的代码。

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.

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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();