Вот как бы я это сделал. Я, безусловно, буду благодарен за любые отзывы других.
var paths = new[]
{
"nodeA1",
"nodeA1/nodeB1/nodeC1",
"nodeA1/nodeB1/nodeC1/nodeD1/nodeE1",
"nodeA1/nodeB1/nodeC2",
"nodeA1/nodeB2/nodeC2"
};
var xml = new XElement("xml");
foreach (var path in paths)
{
var parts = path.Split('/');
var current = xml;
foreach (var part in parts)
{
if (current.Element(part) == null)
{
current.Add(new XElement(part));
}
current = current.Element(part);
}
}
var result = xml.ToString();
Это печатает следующее:
<xml>
<nodeA1>
<nodeB1>
<nodeC1>
<nodeD1>
<nodeE1 />
</nodeD1>
</nodeC1>
<nodeC2 />
</nodeB1>
<nodeB2>
<nodeC2 />
</nodeB2>
</nodeA1>
</xml>