I'm creating a XML-viewer which should be able to read every XML file and put it in a treeview.
My goal is to create a XMLViewer control, an user should be able to change certain routines in his own implementations. I provide default implementations that offer a basic functionality so that the XML viewer at least shows a default behaviour.

What I have so far:

        private void button1_Click(object sender, EventArgs e)
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "XML Files|*.xml";
            ofd.InitialDirectory = @"C:\";

            if (ofd.ShowDialog() == DialogResult.OK)
                textBox1.Text = ofd.FileName.ToString();

                XmlDocument xDoc = new XmlDocument();
                treeView1.Nodes.Add(new TreeNode(xDoc.DocumentElement.Name));
                TreeNode tNode = new TreeNode();
                tNode = (TreeNode)treeView1.Nodes[0];

                addTreeNode(xDoc.DocumentElement, tNode);

        private void addTreeNode(XmlNode xmlNode, TreeNode treeNode)
            XmlNode xNode;
            TreeNode tNode;
            XmlNodeList xNodeList;
            if (xmlNode.HasChildNodes) //The current node has children
                xNodeList = xmlNode.ChildNodes;
                for (int x = 0; x <= xNodeList.Count - 1; x++)
                    xNode = xmlNode.ChildNodes[x];

                    treeNode.Nodes.Add(new TreeNode(xNode.Name));
                    treeNode.ForeColor = Color.Red;
                    tNode = treeNode.Nodes[x];

                    tNode.ForeColor = Color.Green;
                    addTreeNode(xNode, tNode);                    
                treeNode.Text = xmlNode.OuterXml.Trim();

Results in:


What I want:


Any ideas? :)
Thanks in advance!

I'm assumng that you want the value of the last child, in a branch, to be added to it's parent, instead of being put in a new node. Perhaps replacing line 40 with the following will work:

if (xnode(HasChildrenNodes)
    addTreeNode(xNode, tNode);  
    xmlNode.value = xmlNode.value + " " + xNode.value;
This article has been dead for over six months. Start a new discussion instead.