Asp.net и деревья?
Так можно просто рекурсивно все вывести. Примерно вот так:

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");
}



Ну и оформить прямо в шаблоне, методе хелпере или как удобно.
А ещё можно написать маленькую xslt-шку и «вертеть» таким преобразованием как хочешь, не меняя кода программы