2016-02-05 2 views
1

Я пытаюсь написать приложение winforms, которое отображает все открытые узлы XML-файлов (и только его узлы) в TreeView и отображает атрибуты выбранного узла отдельно (по выбранному i означает выбранный в TreeView) (отображается в списке, например). Я попытался добиться этого, используя следующий код, но он выдает исключение: «family/parent» имеет недопустимый токен.C# получить атрибуты XElement из XDocument с помощью пути treeview

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); 
Смежные вопросы