Thursday, November 11, 2010

XML Readers use

Checking the efficency by 3 readers.
1.XMl Document
2.Xml Reader
3.XPath Naviagtor


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.XPath;
using System.Diagnostics;
using System.IO;

namespace EffeciencyCheckInXMLReadOperations
{
    public partial class Form1 : Form
    {
        string m_fileName = @"DataFile.xml";
        string m_XPath = "configuration/appSettings";
        string m_Path = "appSettings";
        string m_File_string;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            m_File_string = File.ReadAllText(m_fileName);
        }

        private IEnumerable ReadXML(XmlReader reader)
        {
            Member member = null;
            if (!reader.ReadToFollowing(m_Path))
                yield return member;

            while (reader.Read() && reader.NodeType != XmlNodeType.EndElement)
            {
                if (!reader.HasAttributes)
                    continue;
                member = new Member();
                member.Data = reader.GetAttribute("key", "");
                member.Value = reader.GetAttribute("value", "");
                yield return member;
            }
        }   
       

        private IEnumerable ReadXML(XPathNavigator xPathNav)
        {
            Member member = null;
            xPathNav = xPathNav.SelectSingleNode(m_XPath);
            if (xPathNav == null)
                yield return member;
           
            xPathNav.MoveToFirstChild();
                do
                {
                    if (!xPathNav.HasAttributes)
                        continue;
                    member = new Member();
                    member.Data = xPathNav.GetAttribute("key", "");
                    member.Value = xPathNav.GetAttribute("value", "");
                    yield return member;
                } while (xPathNav.MoveToNext());
           
        }
        private IEnumerable ReadXML(XmlDocument xmlDoc)
        {
            xmlDoc.LoadXml(m_File_string);
            Member member = null;
            XmlNode node = xmlDoc.SelectSingleNode(m_XPath);
            if (node == null)
                yield return member;
            foreach (XmlNode child in node.ChildNodes)
            {
                if (child.NodeType == XmlNodeType.Comment)
                    continue;
                member = new Member();
                member.Data = child.Attributes[0].Value;
                member.Value = child.Attributes[1].Value;
                yield return member;
            }
        }

        private void XMLReader_Click(object sender, EventArgs e)
        {

            DateTime startWatch = DateTime.Now;
            StringReader rdr = new StringReader(m_File_string);
            using (XmlReader reader = XmlReader.Create(rdr))
            {
                dataGridView1.DataSource = ReadXML(reader).ToList();
            }
            DateTime stopWatch = DateTime.Now;
            TimeSpan time = stopWatch - startWatch;
            MessageBox.Show(time.ToString());
        }

        private void XPathDocument_Click(object sender, EventArgs e)
        {
            DateTime startWatch = DateTime.Now;
            StringReader rdr = new StringReader(m_File_string);
            dataGridView1.DataSource = ReadXML(new XPathDocument(rdr).CreateNavigator()).ToList();
            DateTime stopWatch = DateTime.Now;
            TimeSpan time = stopWatch - startWatch;
            MessageBox.Show(time.ToString());
        }

        private void XMLDocument_Click(object sender, EventArgs e)
        {
            DateTime startWatch = DateTime.Now;
            dataGridView1.DataSource = ReadXML(new XmlDocument()).ToList();
            DateTime stopWatch = DateTime.Now;
            TimeSpan time = stopWatch - startWatch;
            MessageBox.Show(time.ToString());
        }
       
    }       

       
   

    class Member
    {
        public string Data { get; set; }
        public string Value { get; set; }
    }


}




XML file:



No comments:

Post a Comment