Так можно просто рекурсивно все вывести. Примерно вот так:
var str = @"<root>
<item name=""test1"">
<item name=""test11"">
<item name=""test111"" />
<item name=""test112"" />
</item>
<item name=""test12"" />
</item>
<item name=""test2"" />
</root>";
var rootNode = XElement.Parse(str);
OutNode(rootNode);
void OutNode(XElement rootNode)
{
Console.WriteLine ("ul");
foreach(var node in rootNode.Elements().Where(x => x.Name=="item") )
{
Console.WriteLine ("li");
Console.WriteLine (node.Attribute("name").Value);
if(node.HasElements) OutNode(node);
Console.WriteLine ("/li");
}
Console.WriteLine ("/ul");
}
Ну и оформить прямо в шаблоне, методе хелпере или как удобно.