C# 对相同命名的xml节点求和

C# 对相同命名的xml节点求和,c#,xml,C#,Xml,我已经编辑了这个小小的MSDN示例 我有以下两个XML Book1.xml <?xml version="1.0"?> <catalog> <book1 id="1" /> <bookSum number="1" /> </catalog> <?xml version="1.0"?> <catalog> <book2 id="2" /> <bookSum number="1" specialA

我已经编辑了这个小小的MSDN示例

我有以下两个XML

Book1.xml

<?xml version="1.0"?>
<catalog>
<book1 id="1" />
<bookSum number="1" />
</catalog>
<?xml version="1.0"?>
<catalog>
<book2 id="2" />
<bookSum number="1" specialAttribute="123" />
</catalog>
Merge.xml(Book1.xml+Book2.xml)


问题是

如何加入

<bookSum number="1" />
<bookSum number="1" specialAttribute="123" />

排成一行

<bookSum number="2" specialAttribute="123" />

我是这样做的,现在正在工作:

var doc = XDocument.Load(@"C:\Book1.xml");
doc.Root.Add(XDocument.Load(@"C:\Book2.xml").Root.Elements()); // merged

var sum = doc.Descendants("bookSum").Attributes("number").Sum(t => int.Parse(t.Value));

var xElement = new XElement("bookSum", new XAttribute("number", sum));
foreach(var attrib in doc.Descendants("bookSum").Attributes())
{
     if (xElement.Attribute(attrib.Name) == null)
         xElement.Add(attrib);
}

doc.Descendants("bookSum").ToList().ForEach(t => t.ReplaceWith(xElement));
doc.Root.Descendants("bookSum").First().Remove();
Console.WriteLine(doc);

谢谢,它可以工作,但对于重复数据消除,我替换了doc.Root.substands(“bookSum”).First().Remove();int i=1;foreach(doc.sum(“bookSum”)中的var节点.Distinct().ToList(){if(i>1)节点.Remove();i++;}
<bookSum number="2" specialAttribute="123" />
var doc = XDocument.Load(@"C:\Book1.xml");
doc.Root.Add(XDocument.Load(@"C:\Book2.xml").Root.Elements()); // merged

var sum = doc.Descendants("bookSum").Attributes("number").Sum(t => int.Parse(t.Value));

var xElement = new XElement("bookSum", new XAttribute("number", sum));
foreach(var attrib in doc.Descendants("bookSum").Attributes())
{
     if (xElement.Attribute(attrib.Name) == null)
         xElement.Add(attrib);
}

doc.Descendants("bookSum").ToList().ForEach(t => t.ReplaceWith(xElement));
doc.Root.Descendants("bookSum").First().Remove();
Console.WriteLine(doc);