【发布时间】:2016-08-13 07:48:39
【问题描述】:
我有 XML 示例
<order>
<orderItem>
<OrderId>Ex1</OrderId>
<amount>100</amount>
</orderItem>
<orderItem>
<OrderId>Ex2</OrderId>
<amount>150</amount>
</orderItem>
<orderItem>
<OrderId>Ex1</OrderId>
<amount>250</amount>
</orderItem>
</order>
如果 OrderId 标签值等于另一个 OrderId 标签值,则添加 Amount 标签并删除新添加的标签。
我需要的结果输出应该如下所示
<order>
<orderItem>
<OrderId>Ex1</OrderId>
<amount>350</amount>
</orderItem>
<orderItem>
<OrderId>Ex2</OrderId>
<amount>150</amount>
</orderItem>
</order>
OrderId 值应更改。
string filename = "File Location";
var doc = XDocument.Load(filename);
var results = doc.Descendants("order");
var orderItemcount = results.Descendants("orderItem").Count();
我不知道下一步该做什么。
提前致谢。
更新:
我的新 XML 如下所示
<order>
<orderItem>
<Orders>
<OrderId>Ex1</OrderId>
<amount>100</amount>
</Orders>
</orderItem>
<orderItem>
<Orders>
<OrderId>Ex2</OrderId>
<amount>150</amount>
</Orders>
</orderItem>
<orderItem>
<Orders>
<OrderId>Ex1</OrderId>
<amount>250</amount>
</Orders>
</orderItem>
</order>
如果 OrderId 相同,则将该 OrderItem 标记添加到匹配标记。 结果我需要如下所示
<order>
<orderItem>
<Orders>
<OrderId>Ex1</OrderId>
<amount>100</amount>
</Orders>
<Orders>
<OrderId>Ex1</OrderId>
<amount>250</amount>
</orderItem>
<orderItem>
<Orders>
<OrderId>Ex2</OrderId>
<amount>150</amount>
<Orders>
</orderItem>
</order>
更新答案
var groups = doc.Descendants("order").Descendants("orderItem").Descendants("Orders")
.GroupBy(x => (string)x.Element("OrderId"))
.ToList();
XElement newXml = new XElement("order");
foreach (var group in groups)
{
newXml.Add(new XElement("OrderList", new object[] {
// new XAttribute("OrderId", group.Key), // If you Need Key for Attribute add this.
group
}));
}
【问题讨论】:
-
只需将
orderItems与OrderId分组并总结amount