C#从具有树视图路径的XDocument获取XElement属性

时间:2016-02-05 10:44:09

标签: c# xml linq xpath treeview

我正在尝试编写一个winforms应用程序,它在TreeView中显示任何打开的XML文件节点(并且只显示它的节点)并分别显示所选节点的属性(通过选择我在TreeView中选择的意思)(显示在列表框例如)。我试图通过使用以下代码实现此目的,但它抛出一个异常说:'family \ parent'有一个无效的令牌。

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 个答案:

答案 0 :(得分:1)

要避免该异常,您必须将每个双反斜杠替换为XML文件路径中的斜杠。

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