2011-11-21 117 views
0

解析xml文件:XML解析和TreeView

XmlTextReader reader = new XmlTextReader(fileName); 
while (reader.Read()) 
{ 
    switch (reader.NodeType) 
    { 
     case XmlNodeType.Element: // The node is an element. 
      Console.Write("<" + reader.Name); 
      Console.WriteLine(">"); 
      break; 
     case XmlNodeType.Text: //Display the text in each element. 
      Console.WriteLine(reader.Value); 
      break; 
     case XmlNodeType.EndElement: //Display the end of the element. 
      Console.Write("</" + reader.Name); 
      Console.WriteLine(">"); 
      break; 
    } 
} 

我現在該如何選擇節點來獲取XML文件我解析的樹視圖?這是我迄今:

<TreeView Margin="177,61" Name="myTreeView" ItemsSource="{Binding XPath=XmlNodeType.Element}" > 
    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding XPath=XmlNodeType.Element}"> 
      <TextBlock Text="{Binding XPath=XmlNodeType.Text}" /> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

,但沒有顯示出來....只是不知道如何添加節點我猜...

回答

2

你必須在代碼中添加節點的背後像這樣:

var newNode = new TreeViewItem 
{ 
    Header = "New Node" 
}; 
myTreeView.Items.Add(newNode); 

這會將一個節點添加到樹的頂部。如果你想建立一個層次,你必須在這樣的此時,相應的位置添加節點:

// Find the node you want to have as parent. 
var parentNode = myTreeView.Items.Cast<TreeViewItem>().FirstOrDefault(item => item.Header = "Parent Node"); 
if (parentNode != null) 
{ 
    var newNode = new TreeViewItem 
    { 
     Header = "New Node" 
    }; 
    parentNode.Items.Add(newNode); 
} 

BTW:我會用x:Name屬性爲Name在XAML元素,有時會有一些麻煩在後面的代碼當你只使用Name

+0

哇,這太酷了!謝謝您的幫助。投票你並選擇了你的答案 – BigBug

+0

當創建一個層次結構「item.Header =」Parent Node「)時,這個部分似乎是個問題。」「另外,我不認爲我很理解那條線。你能向我解釋嗎? – BigBug

+0

這只是一個找到父節點的示例。當你「走過」你的xml文件並且你已經添加了一個節點時,那麼你已經擁有了所有子節點的父節點。我發佈的這一行,請執行以下操作(作爲示例!):它將全部項目轉換爲TreeViewItem並搜索第一個節點,即將「父節點」設置爲標題。 – Fischermaen