2010-05-05 5 views
1

Im utilisant .net Windows formulaire de demande. J'ai un fichier XML. Je veux remplir une vue arborescente avec des données d'un fichier XML. Je fais cela en utilisant le code suivant.remplir une arborescence avec un fichier xml

private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      this.Cursor = System.Windows.Forms.Cursors.WaitCursor; 

      //string strXPath = "languages"; 
      string strRootNode = "Treeview Sample"; 

      OpenFileDialog Dlg = new OpenFileDialog(); 
     Dlg.Filter = "All files(*.*)|*.*|xml file (*.xml)|*.txt"; 
     Dlg.CheckFileExists = true; 
     string xmlfilename = ""; 


     if (Dlg.ShowDialog() == DialogResult.OK) 
     { 
      xmlfilename = Dlg.FileName; 

     } 



      // Load the XML file. 
      //XmlDocument dom = new XmlDocument(); 
      //dom.Load(xmlfilename); 

      XmlDocument doc = new XmlDocument(); 
      doc.Load(xmlfilename); 
      string rootName = doc.SelectSingleNode("/*").Name; 
      textBox4.Text = rootName.ToString(); 
      //XmlNode root = dom.LastChild; 
      //textBox4.Text = root.Name.ToString(); 


      // Load the XML into the TreeView. 
      this.treeView1.Nodes.Clear(); 
      this.treeView1.Nodes.Add(new TreeNode(strRootNode)); 
      TreeNode tNode = new TreeNode(); 
      tNode = this.treeView1.Nodes[0]; 

      XmlNodeList oNodes = doc.SelectNodes(textBox4.Text); 
      XmlNode xNode = oNodes.Item(0).ParentNode; 

      AddNode(ref xNode, ref tNode); 

      this.treeView1.CollapseAll(); 
      this.treeView1.Nodes[0].Expand(); 
      this.Cursor = System.Windows.Forms.Cursors.Default; 
     } 

     catch (Exception ex) 
     { 
      this.Cursor = System.Windows.Forms.Cursors.Default; 
      MessageBox.Show(ex.Message, "Error"); 
     } 
    } 
    private void AddNode(ref XmlNode inXmlNode, ref TreeNode inTreeNode) 
    { 
     // Recursive routine to walk the XML DOM and add its nodes to a TreeView. 
     XmlNode xNode; 
     TreeNode tNode; 
     XmlNodeList nodeList; 
     int i; 

     // Loop through the XML nodes until the leaf is reached. 
     // Add the nodes to the TreeView during the looping process. 
     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(ref xNode, ref tNode); 
      } 
     } 
     else 
     { 
      inTreeNode.Text = inXmlNode.OuterXml.Trim(); 
     } 
    } 

Mon fichier xml est le suivant: "hello.xml"

<?xml version="1.0" encoding="utf-8" ?> 
<languages> 
    <language> 
    <key>abc</key> 
    <value>hello how ru</value> 
    </language> 
    <language> 
    <key>def</key> 
    <value>i m fine</value> 
    </language> 
    <language> 
    <key>ghi</key> 
    <value>how abt u</value> 
    </language> 
</languages> 

maintenant après avoir utilisé le code ci-dessus, je suis en mesure de remplir l'arborescence. Mais je n'aime pas remplir le fichier XML complet. Je devrais obtenir seulement jusqu'à

languages 
    language 
     key 
     value 

Je ne veux pas

abc 
how are you 
etc..... 

Je veux dire les nœuds feuilles. S'il vous plaît aidez-moi

Répondre

1

Ce que vous ne voulez pas ajouter est le contenu du texte des nœuds, si j'ai bien compris; Ensuite, vous pouvez vérifier la propriété NodeType de la classe XmlNode, quelque chose comme:

xNode = inXmlNode.ChildNodes[i]; 
if (xNode.NodeType != XmlNodeType.Text) { 
    inTreeNode.Nodes.Add(new TreeNode(xNode.Name)); 
    tNode = inTreeNode.Nodes[i]; 
    AddNode(ref xNode, ref tNode); 
} 
Questions connexes