我正在尝试将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.
答案 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();