2015-12-08 2 views
0

У меня есть два файла XML, которые я показываю тогда в формате treeview в Visual Studio C#. В обоих treeviews корень и первый ребенок одинаковы. Пусть отображение ее:Создание дочернего узла для текущего узла в дереве xml. C#

root 
    child1 
     children1 
     children1 
     children1 
     children1 
     children1 

и второй TreeView у меня есть:

root 
    child1 
     children2 
     children2 
     children2 
     children2 
     children2 

Теперь я сравниваю как TreeView в уровне children. Если они равны в имени, я оставляю их в противном случае, я хочу создать виртуальный узел/детей, но не знаю, как это сделать. Я написал этот код, но он добавляет к root узлу вместо добавления к child узла

 XmlDocument docXml1 = new XmlDocument(); 
     docXml1.Load(xmlfile1); 
     XmlDocument docXml2 = new XmlDocument(); 
     docXml2.Load(xmlfile2); 
     XmlNodeList actions1 = root1.SelectNodes("/root/child1/children1"); 
     XmlNodeList actions2 = root2.SelectNodes("/root/child1/children2"); 

     if (Name_of_children1 != Name_of_children2) 
      { 
       var VirtualNode = ""; 
       treeView1.Nodes.Add(VirtualNode.Trim());      
      } 

, конечно, много строк кода удаляются, чтобы сделать его коротким.

+0

показать код, который вы используете для добавления узлов XML в дерево – csharpwinphonexaml

ответ

0

Это полный пример того, как вы могли бы сделать это:

TestForm.cs:

public partial class TestForm : Form 
{ 
    public TestForm() 
    { 
     InitializeComponent(); 
     this.Load += Test_Load; 
    } 

    private void Test_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      XmlDocument doc1 = new XmlDocument(); 
      doc1.Load("file1.xml"); 
      XmlDocument doc2 = new XmlDocument(); 
      doc2.Load("file2.xml"); 

      trvLeft.Nodes.Clear(); 
      trvRight.Nodes.Clear(); 
      trvLeft.Nodes.Add(new TreeNode("File 1")); 
      trvRight.Nodes.Add(new TreeNode("File 2")); 
      TreeNode tlNode = new TreeNode(); 
      TreeNode trNode = new TreeNode(); 
      tlNode = trvLeft.Nodes[0]; 
      trNode = trvRight.Nodes[0]; 
      AddNode(doc1.DocumentElement, doc2.DocumentElement, tlNode, trNode); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 


     var childrensLeft = trvLeft.Nodes[0].Nodes[0].Nodes; 
     var childrensRight = trvRight.Nodes[0].Nodes[0].Nodes; 
     for (int i = 0; i < Math.Min(childrensLeft.Count, childrensRight.Count); i++) 
     { 
      if (childrensRight[i].Text != childrensLeft[i].Text) 
      { 
       //childrensLeft[i].ForeColor = Color.Red; 
       //childrensRight[i].ForeColor = Color.Red; 
       childrensLeft[i].Nodes.Add("Something to left"); 
       childrensRight[i].Nodes.Add("Something to right"); 
      } 
     } 
     trvLeft.ExpandAll(); 
     trvRight.ExpandAll(); 
    } 
    private void AddNode(XmlNode leftXmlNode, XmlNode rightXmlNode, TreeNode leftNode, TreeNode rightNode) 
    { 
     //XmlNode xNode; 
     TreeNode tlNode; 
     TreeNode trNode; 
     XmlNodeList lnodeList; 
     XmlNodeList rnodeList; 
     int i; 

     if (leftXmlNode.HasChildNodes && rightXmlNode.HasChildNodes) 
     { 
      lnodeList = leftXmlNode.ChildNodes; 
      rnodeList = rightXmlNode.ChildNodes; 
      for (i = 0; i <= Math.Min(lnodeList.Count, rnodeList.Count) - 1; i++) 
      { 
       var lNode = leftXmlNode.ChildNodes[i]; 
       var rNode = rightXmlNode.ChildNodes[i]; 
       leftNode.Nodes.Add(new TreeNode(lNode.Name)); 
       tlNode = leftNode.Nodes[i]; 
       rightNode.Nodes.Add(new TreeNode(rNode.Name)); 
       trNode = rightNode.Nodes[i]; 
       AddNode(lNode, rNode, tlNode, trNode); 
      } 
     } 
     else 
     { 
      leftNode.Text = (leftXmlNode.OuterXml).Trim(); 
      rightNode.Text = (rightXmlNode.OuterXml).Trim(); 
     } 
    } 
} 

file1.xml

<root> 
    <child1> 
     <children1/> 
     <children1/> 
     <children1/> 
     <children1/> 
     <children1/> 
     <children1/> 
    </child1> 
</root> 

file2.xml

<root> 
    <child1> 
     <children1/> 
     <children2/> 
     <children1/> 
     <children1/> 
     <children1/> 
     <children1/> 
    </child1> 
</root> 

Результат: Result Screenshot

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