2012-09-06 90 views
0

我想知道我怎麼能解析這個XML:解析XML層次

<MenuItems> 
    <MenuItem Id="2" Name="Country"> 
    <MenuItem Id="2272" Name="Europe"> 
     <MenuItem Id="888" Name="Austria"/> 
    </MenuItem> 
    <MenuItem Id="2572" Name="Asia"> 
    <MenuItem Id="2572" Name="Japan"/> 
    </MenuItem> 
     </MenuItem> 
     <MenuItem Id="3" Name="Car"> 
    <MenuItem Id="231" Name="Diesel"> 
     <MenuItem Id="387" Name="Toyota"> 
    <MenuItem Id="387" Name="Avensis"/> 
     </MenuItem> 
    </MenuItem> 
    </MenuItem> 
</MenuItems> 

,並編寫以下輸出到控制檯:

國家
- 歐洲
--Austria
-Asia
- 日本
汽車
-Diesel
--Toyota
--- AVENSIS

我不知道事先在層次結構孩子的深度。

我的代碼:

XElement doc = XElement.Parse(DataXml); 
XElement MenuNode = doc.XPathSelectElement("/MenuItem"); 
var segmentNodes = MenuNode.XPathSelectElements("/"); 

foreach (XElement segmentNode in segmentNodes) 
{ 
    var segmentAlignment = (string)segmentNode.Attribute("Name"); 
    Console.Writeline(segmentAlignment); 
} 
+3

Google「遞歸」 –

回答

0

事情是這樣的:

using System.Xml.Linq; 
using System.Xml.XPath; 

. . . 

void PrintMenu(XElement menuElement, string prefix) 
{ 
    string newPrefix = prefix + "-"; 
    foreach (XElement subMenuElement in menuElement.XPathSelectElements("MenuItem")) { 
    Console.WriteLine(prefix+(string)subMenuElement.Attribute("Name")); 
    PrintMenu(subMenuElement, newPrefix); 
    } 
} 

. . . 

XElement doc = XElement.Parse(DataXml); 
PrintMenu(doc, String.Empty);