2016-02-05 82 views
1

我試圖編寫一個Winforms應用程序,它在TreeView中顯示任何已打開的XML文件節點(只有它是節點),並分別顯示所選節點的屬性在TreeView中選擇)(例如顯示在列表框中)。我試圖通過使用下面的代碼來實現這一點,但它會拋出一個異常:'family \ parent'具有無效的標記。C#從TreeView路徑獲取XDocument的XElement屬性

private void TView__AfterSelect(object sender, TreeViewEventArgs e) 
{ 
    var doc = XDocument.Load(businessLayer.InputFilepath); 
    XElement myElement = doc.Root.XPathSelectElement(TView_.SelectedNode.FullPath); 
    try 
    { 
     foreach (var attribute in myElement.Attributes()) 
     { 
      listBox1.Items.Add(attribute.Value); 
     } 
    } 
    catch (Exception) 
    { 
    } 
} 

我用下面的XML文件:

<?xml version="1.0" encoding="utf-8" ?> 
<family> 
    <parent> 
    <id>grandfather</id> 
    <parent> 
     <id>father</id> 
     <parent> 
     <id>brother</id> 
     <child> 
      <id>niece</id> 
     </child> 
     </parent> 
     <parent> 
     <is>me</is> 
     <child> 
      <id>son</id> 
     </child> 
     <child> 
      <id>dauhter</id> 
     </child> 
     </parent> 
     <child> 
     <id>sister</id> 
     </child> 
    </parent> 
    <parent> 
     <id>uncle</id> 
     <parent> 
     <id>cousin sister</id> 
     <child> 
      <id>second cousin</id> 
     </child> 
     </parent> 
     <child> 
     <id>cousin brother</id> 
     </child> 
    </parent> 
    </parent> 
</family> 

我不知道還有什麼我可以嘗試,所以任何幫助表示讚賞線索。

+1

如果你沒有任何屬性作爲XML中元素的一部分,爲什麼要迭代屬性?它很可能會返回NULL。看起來像是XML設計中的一個錯誤。 – zx485

+0

我的意思是解決這個問題,但不知怎麼管理忘記它。謝謝。 –

回答

1

爲避免該異常,您必須將每個雙反斜槓替換爲XML文件路徑中的斜線。

string path = treeView1.SelectedNode.FullPath.Replace('\\', '/'); 
XElement myElement = doc.XPathSelectElement(path);