2016-02-05 49 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);