Различные способы сделать это; Muenchian группировка в xslt, например. Но в C #, если макет xml известен и исправлен, возможно, самым простым будет:
var root = XElement.Parse(xml);
var newRoot = new XElement("root",
root.Elements("node1").Select(el =>
new {
ss = (string)el.Attribute("ss"),
ff = (string)el.Attribute("ff"),
gg = (string)el.Attribute("gg"),
}).Distinct().Select(obj =>
new XElement("node1",
new XAttribute("ss", obj.ss),
new XAttribute("ff", obj.ff),
new XAttribute("gg", obj.gg))));
Если вам нужно что-то более гибкое, IEqualityComparer<XElement>
(для использования с .Distinct()
) будет более ценным.