2015-11-24 5 views
0

Я написал код, который читает файл XMl, а затем создайте древовидное представление файла XML, используя имя узла. Я хотел бы знать, как мне получить атрибуты вместо имени компонентов (узлов)?Сохранить все атрибуты узлов XML

Например, в следующем XML файл вместо action (ов) Я хотел бы напечатать в виде дерева copy или paste, и т.д., в течение первых двух родительских узлов (Report и test), за исключением.

XML файл:

<Report version="2.1" xmlns="http://www.froglogic.com/XML2"> 
<test name="Example"> 
    <action name="delet"> 
     this is delet 
    </action> 
    <action name="copy"> 
     this is copy 
    </action> 
    <action name="paste"> 
     this is paste 
    </action> 
    <action name="manipulate"> 
     this is manipulate 
    </action> 
    <action name="copy"> 
     this is copy 
    </action> 
    <action name="paste"> 
     this is paste 
    </action> 
    <action name="manipulate"> 
     this is manipulate 
    </action> 
    <action name="change"> 
     this is change 
    </action> 
</test> 
</Report> 

и C# код:

private void File2_load(object sender, EventArgs e) 
    { 
     try 
     { 
      XmlDocument doc = new XmlDocument(); 
      doc.Load(File2Path.Text); 

      treeView2.Nodes.Clear(); 
      treeView2.Nodes.Add(new TreeNode(doc.DocumentElement.Name)); 
      TreeNode tNode = new TreeNode(); 
      tNode = treeView2.Nodes[0]; 

      AddNode(doc.DocumentElement, tNode); 
      treeView2.ExpandAll(); 
      treeView2.CheckBoxes = true; 
     } 
     catch (XmlException xmlEx) 
     { 
      MessageBox.Show(xmlEx.Message); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

Update

private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode) 
    { 
     XmlNode xNode; 
     TreeNode tNode; 
     XmlNodeList nodeList; 
     int i; 

     if (inXmlNode.HasChildNodes) 
     { 
      nodeList = inXmlNode.ChildNodes; 
      for (i = 0; i <= nodeList.Count - 1; i++) 
      { 
       xNode = inXmlNode.ChildNodes[i]; 
       inTreeNode.Nodes.Add(new TreeNode(xNode.Name)); 
       tNode = inTreeNode.Nodes[i]; 
       AddNode(xNode, tNode); 
      } 
     } 
     else 
     { 
      inTreeNode.Text = (inXmlNode.OuterXml).Trim(); 
     } 
    } 
+0

Возможный дубликат [Получение значения атрибута XML-документа с использованием C#] (http://stackoverflow.com/questions/3750678/getting-attribute-value-of-an-xml-document-using-c-sharp) – har07

+0

Но то, что мне нужно, - это первые два имени парандов, а затем остальные представления в атрибутах дерева. –

+0

Покажите нам код метода 'AddNode', который вы вызываете, и мы можем помочь его изменить. –

ответ

0

Изменить

  xNode = inXmlNode.ChildNodes[i]; 
      inTreeNode.Nodes.Add(new TreeNode(xNode.Name)); 

в

  xNode = inXmlNode.ChildNodes[i]; 
      TreeNode childTreeNode; 
      if (xNode.LocalName == "action" && xNode.NodeType == XmlNodeType.Element) 
      { 
       childTreeNode = new TreeNode(xNode.Attributes["name"].Value); 
      } 
      else 
      { 
       childTreeNode = new TreeNode(xNode.Name); 
      } 

      inTreeNode.Nodes.Add(childTreeNode); 

Вы можете добавить дополнительные проверки на NodeType и LocalName, в зависимости от сложности вашего ввода XML и возможных узлов, которые могут содержаться во входных данных XML.

+0

Я изменил 'Getattributes (" name ")' на 'Attributes [" name "]. Value'. Ошибка произошла. –

+0

@Saber, да, извините, «GetAttribute» - это метод в «XmlElement», поэтому мне нужно было бы перенести сначала на элемент. Я отредактировал образец, если ваша проблема решена, тогда вы можете принять ответ. –

Смежные вопросы