Here's a fun little hack that at least only resorts to string manipulation late in the piece:
var nodes = new XElement("XmlNodes");
foreach (var i in Enumerable.Range(1,10))
{
nodes.Add(new XElement("ChildNode",
new XAttribute("Attribute1", 100),
new XAttribute("Attribute2", 200),
new XAttribute("Attribute3", 0)));
}
var result = nodes.ToString().Replace("\" A", "\"\tA"); // **" A** becomes **"\tA**
But I maintain that if this is about providing 'templates' for people to edit then you're best off getting them to edit it in a non-XML format (like CSV) and then convert to XML when you parse it.