How to quickly display a large XML file (> 21 MB) in a tree

I need to display a large XML file (> 21 MB) in a tree structure control in a C # Windows Form application. I wrote code that works for small XML files, but when I try to open a BIG XML file (> 1 MB), it takes too much time. Can someone suggest how I can optimize this and offer me any changes or alternatives to achieve this.

The following is a snippet of code:

private void CreateTreeViewFromATXML(string strSrcFileName)
        {
            XmlDataDocument xmldoc = new XmlDataDocument();
            XmlNode xmlnode ;
            FileStream fs = new FileStream(strSrcFileName, FileMode.Open, FileAccess.Read);
            xmldoc.Load(fs);
            xmlnode = xmldoc.ChildNodes[1];
            XMLTreeView.Nodes.Clear();
            XMLTreeView.Nodes.Add(new TreeNode(xmldoc.DocumentElement.Name));
            TreeNode tNode ;
            tNode = XMLTreeView.Nodes[0];
            AddNode(xmlnode, tNode);
        }


    private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode)
    {
        //XmlNode xNode ;
        TreeNode tNode ;
        XmlNodeList nodeList ;
        int i = 0;
        if (inXmlNode.HasChildNodes)
        {
            nodeList = inXmlNode.ChildNodes;

            foreach (XmlNode XNode in inXmlNode.ChildNodes)
            {
                tNode = new TreeNode(XNode.Name);
                inTreeNode.Nodes.Add(tNode);
                AddNode(XNode, tNode);
            }
        }
        else
        {
            inTreeNode.Text = inXmlNode.InnerText.ToString();
        }
    }
+4
source share
3 answers

I would wrap your code like this:

XMLTreeView.BeginUpdate();
try
{
    CreateTreeViewFromATXML(strSrcFileName);
}
catch (Exception e)
{
    //Handle any error
}
finally
{
    XMLTreeView.EndUpdate();
}

, GUI node . AddNode, XML , .

+4

XDocument XML Linq . XML:

using System.Xml;
using System.Xml.Linq;
using System.Data;

            XDocument xdoc = XDocument.Load(XMLFile);

var item = from items in xdoc.Element("EPICORTLOG").Descendants("POS")
                       where (string)items.Element("Id") == strSelectedPOSID
                       select items.Elements("TRADE").Elements("ITEM").ToList().ToList();

XML: http://www.dotnetcurry.com/showarticle.aspx?ID=564 XML LINQ. , XML 10 .

+1

TreeView HTML- #, , , XML . , 20 2 . XML 2G #. , .

Serializable Structure TreeView TreeNode

[Serializable]
public class TreeViewData
{
    public TreeNodeData[] Nodes;
    public TreeViewData(){ }  
    public TreeViewData(TreeView treeview)
    {
       //your code
    }
    public TreeViewData(TreeNode treenode)
    {
       //your code 
    }
    public void PopulateTree(TreeView treeview)
    {
        //your code 
    }
    public void PopulateSubTree(TreeNode treenode)
    {
         //your code 
    }
}
[Serializable]
public class TreeNodeData
{
    public string Text;
    public int ImageIndex;
    public int SelectedImageIndex;
    public string Tag;
    public TreeNodeData[] Nodes;
    public TreeNodeData() {}  
    public TreeNodeData(TreeNode node)
    {
          // your code 
    }
    public TreeNode ToTreeNode()
    {
     // your code 
    }
}

XML

System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(TreeViewData));
System.IO.FileStream file = new System.IO.FileStream(strFilename, FileMode.Open);
System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(file);
TreeViewData treeData = (TreeViewData)ser.Deserialize(reader);
treeData.PopulateTree(TreeView1);

XML-

System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(TreeViewData));
System.IO.FileStream file = new System.IO.FileStream(strFilename,   System.IO.FileMode.Create);
System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(file, null);
ser.Serialize(writer, new TreeViewData(TreeView1));
0

All Articles