using System.Collections.Generic;
public static void Main(string[] args)
<investment>1000</investment>
var original = XDocument.Parse(xml);
var grouped = new XDocument(GroupElements(original.Elements()));
Console.WriteLine(grouped);
private static IEnumerable<XElement> GroupElements(IEnumerable<XElement> elements)
var elementsByName = elements.GroupBy(x => x.Name);
foreach (var grouping in elementsByName)
var transformed = grouping.Select(e =>
GroupElements(e.Elements()),
e.Nodes().OfType<XText>()));
if (grouping.Count() == 1)
yield return transformed.Single();
var groupName = grouping.Key + "s";
yield return new XElement(groupName, transformed);