How To: Read XML data into a DataSet#

Last week I showed you ways on how to read text files. This time around we will be looking at how to load XML files into a DataSet.

Let's assume that we have a file called Symbols.xml which contains some XML data.

<?xml version="1.0" encoding="utf-8" ?>
<Symbols>
    <Symbol ExecutionSymbol="ATT" Name="AT&amp;T"></Symbol>
    <Symbol ExecutionSymbol="MSFT" Name="Microsoft"></Symbol>
    <Symbol ExecutionSymbol="GOOG" Name="Google"></Symbol>
    <Symbol ExecutionSymbol="CSCO" Name="Cisco"></Symbol>
    <Symbol ExecutionSymbol="IP" Name="International Paper Co."></Symbol>
    <Symbol ExecutionSymbol="MF" Name="MF Global"></Symbol>
    <Symbol ExecutionSymbol="Q" Name="Qwest Communications International Inc."></Symbol>
    <Symbol ExecutionSymbol="BMC" Name="BMC Software Inc."></Symbol>
    <Symbol ExecutionSymbol="WCI" Name="WCI Communities Inc."></Symbol>
    <Symbol ExecutionSymbol="SPY" Name="SDRs"></Symbol>
    <Symbol ExecutionSymbol="LEH" Name="Lehman Brothers Holdings Inc."></Symbol>
    <Symbol ExecutionSymbol="XLF" Name="Financial Select Sector SPDR"></Symbol>
    <Symbol ExecutionSymbol="QQQQ" Name="PowerShares QQQ TR 1"></Symbol>
    <Symbol ExecutionSymbol="IWM" Name="IShare Rus 2000 INDX"></Symbol>
    <Symbol ExecutionSymbol="GE" Name="General Electric Co."></Symbol>
    <Symbol ExecutionSymbol="MER" Name="Merrill Lynch Co., Inc."></Symbol>
    <Symbol ExecutionSymbol="BAC" Name="Bank of America Corporation"></Symbol>
    <Symbol ExecutionSymbol="INTC" Name="Intel Corp"></Symbol>
    <Symbol ExecutionSymbol="F" Name="Ford Motor Co."></Symbol>
    <Symbol ExecutionSymbol="QID" Name="UltraShort QQQ ProShares"></Symbol>
</Symbols>

And you want to load that data into a DataSet and display it to a GridView. How would you do it?

There are different ways you can load an XML file to a DataSet and i'm here to show you 4 of them. I don't have alot of time to explain the intrinsicts of each sample or performance comparisson of each technique because of time constraints so i'll leave that part for you to figure out the best among this examples. ;)

SAMPLE 1

//Sample 1
//the code below shows us how to load the XML document
//directly to our dataset by just specifying the file
//location to the DataSet.ReadXml method of the DataSet

using System;
using System.Data;
using System.Xml;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string xmlFilePath = Server.MapPath(@"App_Data/Symbols.xml");

        if (File.Exists(xmlFilePath))
        {
            //create the Dataset object
            using (DataSet ds = new DataSet())
            {
                //load the xml data to the dataset
                ds.ReadXml(xmlFilePath);

                //bind the values to our GridView
                symbolGridView.Caption = "<h4>Loaded the data using Sample1</h4>";
                symbolGridView.DataSource = ds;
                symbolGridView.DataBind();
            }
        }
    }
}

SAMPLE 2

//Sample 2
//The code below is using the TextReader object to read
//the contents of the file and then assign those values
//to our dataset object

using System;
using System.Data;
using System.Xml;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string xmlFilePath = Server.MapPath(@"App_Data/Symbols.xml");

        if (File.Exists(xmlFilePath))
        {
            //Create the TextReader object
            using (TextReader sReader = new StreamReader(xmlFilePath))
            {
                //create the Dataset object
                using (DataSet ds = new DataSet())
                {
                    //load the xml data from the TextReader to the Dataset
                    ds.ReadXml(sReader);

                    //bind the values to our GridView
                    symbolGridView.Caption = "<h4>Loaded the data using Sample2</h4>";
                    symbolGridView.DataSource = ds;
                    symbolGridView.DataBind();
                }
            }
        }
    }
}

SAMPLE 3

//Sample 3
//The code below is basically the same as the above code
//but this time we are using the XmlTextReader object
//instead of using the TextReader object. Please note that
//the XmlReader object calls the TextReader internally.

using System;
using System.Data;
using System.Xml;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string xmlFilePath = Server.MapPath(@"App_Data/Symbols.xml");

        if (File.Exists(xmlFilePath))
        {
            //Create the XmlTextReader object
            using (XmlTextReader xTextReader = new XmlTextReader(xmlFilePath))
            {
                //create the Dataset object
                using (DataSet ds = new DataSet())
                {
                    //load the xml data to dataset
                    ds.ReadXml(xTextReader);

                    //bind the values to our GridView
                    symbolGridView.Caption = "<h4>Loaded the data using Sample3</h4>";
                    symbolGridView.DataSource = ds;
                    symbolGridView.DataBind();
                }
            }
        }
    }
}

SAMPLE 4

//Sample 4
//The code below uses an XmlDocument object and reads a file
//using the XmlDocument.LoadXml method. That data is then
//transfered to a DataSet by using the DataSet.ReadXml method
//and passing a XmlNodeReader object based on our XmlDocument

using System;
using System.Data;
using System.Xml;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string xmlFilePath = Server.MapPath(@"App_Data/Symbols.xml");

        if (File.Exists(xmlFilePath))
        {
            //Create the Dataset object
            using (DataSet ds = new DataSet())
            {
                //create the XmlDocument object
                XmlDocument xDoc = new XmlDocument();

                //load the contents of the file to our XmlDocument object
                xDoc.LoadXml(File.ReadAllText(xmlFilePath));

                //load the xml data in the XmlDocument object to the Dataset
                ds.ReadXml(new XmlNodeReader(xDoc));

                //bind the values to our GridView
                symbolGridView4.Caption = "<h4>Loaded the data using Sample4</h4>";
                symbolGridView4.DataSource = ds;
                symbolGridView4.DataBind();
            }
        }
    }
}

And that's it. On my next post i'll show you how to load XML data directly to the GridView using the XMLDataSource object.

HTH.

Thursday, March 27, 2008 3:47:22 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

How To: Read a file in .NET - Sample 3#

Sample 3 is similar to Sample 1 and and Sample 2 but it uses the File.ReadAllText method which reads the content of the whole file instead of reading the data line by line or reading the data and putting the values into a string[].

[C# Version]

using System;
using System.IO;

namespace KeithRull.ReadMyFile
{
    class Program
    {
        static void Main(string[] args)
        {
            //the filename of the file to read
            string xmlFilename = "Symbols.xml";
          
            //validate if the file exist
            if (File.Exists(xmlFilename))
            {
                //read the contents of the file
                string fileContent = File.ReadAllText(xmlFilename);

                //display the output in the screen
                Console.WriteLine(fileContent);
            }
            else
            {
                //notify that the file was not found
                Console.WriteLine("File not found!");
            }

            //pause and wait for the user.
            Console.ReadLine();
        }
    }
}

[VB.NET Version]

Imports System 
Imports System.IO 

Namespace KeithRull.ReadMyFile 
    Class Program 
        Private Shared Sub Main(ByVal args As String()) 
            'the filename of the file to read 
            Dim xmlFilename As String = "Symbols.xml" 
            
            'validate if the file exist 
            If File.Exists(xmlFilename) Then 
                'read the contents of the file 
                Dim fileContent As String = File.ReadAllText(xmlFilename) 
                
                'display the output in the screen 
                Console.WriteLine(fileContent) 
            Else 
                'notify that the file was not found 
                Console.WriteLine("File not found!") 
            End If 
            
            'pause and wait for the user. 
            Console.ReadLine() 
        End Sub 
    End Class 
End Namespace 
Wednesday, March 19, 2008 7:18:14 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

How To: Read a file in .NET - Sample 2#
Sample demonstrates how to use the File.ReadAllLines technique 

[C# Version]

using System;
using System.IO;

namespace KeithRull.ReadMyFile
{
    class Program
    {
        static void Main(string[] args)
        {
            //the filename of the file to read
            string xmlFilename = "Symbols.xml";
          
            //validate if the file exist
            if (File.Exists(xmlFilename))
            {
                //read the contents of the file
                string[] fileContent = File.ReadAllLines(xmlFilename);

                //iterate for each line item in our file
                foreach (string lineItem in fileContent)
                {
                    //display the output in the screen
                    Console.WriteLine(lineItem);
                }
            }
            else
            {
                //notify that the file was not found
                Console.WriteLine("File not found!");
            }

            //pause and wait for the user.
            Console.ReadLine();
        }
    }
}

[VB.NET Version]

Imports System
Imports System.IO

Namespace KeithRull.ReadMyFile
    Class Program
        Private Shared Sub Main(ByVal args As String())
            'the filename of the file to read
            Dim xmlFilename As String = "Symbols.xml"
           
            'validate if the file exist
            If File.Exists(xmlFilename) Then
                'read the contents of the file
                Dim fileContent As String() = File.ReadAllLines(xmlFilename)
               
                'iterate for each line item in our file
                For Each lineItem As String In fileContent
                    'display the output in the screen
                    Console.WriteLine(lineItem)
                Next
            Else
                'notify that the file was not found
                Console.WriteLine("File not found!")
            End If
           
            'pause and wait for the user.
            Console.ReadLine()
        End Sub
    End Class
End Namespace

Wednesday, March 19, 2008 7:04:44 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

How To: Read a file in .NET - Sample 1#

Sample 1 demonstrates how to use the StreamReader technique when reading the contents of a file

[C# Version]

using System;
using System.IO;

namespace KeithRull.ReadMyFile
{
    class Program
    {
        static void Main(string[] args)
        {
            //the filename of the file to read
            string xmlFilename = "Symbols.xml";
          
            //validate if the file exist
            if (File.Exists(xmlFilename))
            {
                //create a new StreamReader object tha would read the file
                using (StreamReader sReader = new StreamReader(xmlFilename))
                {
                    //create a string object that would hold the
                    //value of each line in our file
                    string line = String.Empty;
                    
                    //iterate for each line item in our file
                    while ((line = sReader.ReadLine()) != null)
                    {
                        //display the output in the screen
                        Console.WriteLine(line);
                    }
                }
            }
            else
            {
                //notify that the file was not found
                Console.WriteLine("File not found!");
            }

            //pause and wait for the user.
            Console.ReadLine();
        }
    }
}

[VB.NET Version]

Imports System 
Imports System.IO 

Namespace KeithRull.ReadMyFile 
    Class Program 
        Private Shared Sub Main(ByVal args As String()) 
            'the filename of the file to read 
            Dim xmlFilename As String = "Symbols.xml" 
            
            'validate if the file exist 
            If File.Exists(xmlFilename) Then 
                'create a new StreamReader object tha would read the file 
                Using sReader As New StreamReader(xmlFilename) 
                    'create a string object that would hold the 
                    'value of each line in our file 
                    Dim line As String = [String].Empty 
                    
                    'iterate for each line item in our file 
                    While (line = sReader.ReadLine()) IsNot Nothing 
                        'display the output in the screen 
                        Console.WriteLine(line) 
                    End While 
                End Using 
            Else 
                'notify that the file was not found 
                Console.WriteLine("File not found!") 
            End If 
            
            'pause and wait for the user. 
            Console.ReadLine() 
        End Sub 
    End Class 
End Namespace 
Wednesday, March 19, 2008 6:52:53 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Xtreme Justice League eh?#

I saw this on the news this morning and at first i thought this guys are some sort terrorist.. I was surprised to find out that these guys are actually "Real-Life Super Heroes" living in my area. Interesting.

Friday, March 14, 2008 2:55:06 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Busy. Busy. Busy and Loving It!#

I love being busy. I do.

I love working and building applications. I love making sure that what I build is a high quality application that has the 'Wow' factor stamped all over it. I guess it's just my nature to enjoy work and build stuff.

I love building stuff. I do.

Being busy makes me feel productive. Pressure makes me better and seeing my users smile at the end of the project motivates me to do my best job everytime. Thinking of my family and our future keeps me moving. It does. It really does.

I've been busy this past few weeks (i think it's almost a month and half know) with so much stuff going on at work doing UAT and production launch in a big ASP.NET dashboard application that I have been building in the past few months and I haven't had the change to post anything useful since early February because of these work related things.

None. Zip. Nada.

Anyway, that should change soon since my schedule would be a little bit more relax in the next few weeks other than a week I need to spend with some Cognos guys to show them our data and help them mine it. Oh well! I'll post something code related tonight. Promise!

I'll keep you posted for sure! Later!

Wednesday, March 12, 2008 3:42:01 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

Defy All Challenges: The .NET Developer Roadshow (Philippines)#

Microsoft Philippines is conducting an event for developers called "Defy All Challenges: The .NET Developer Roadshow" on March 26, 2008 at SM Megamall Cinema 4, Ortigas Center, Mandaluyong City, Philippines. I think this is going to be a great event! I've already talked to few developers and they are definetely excited although some raise concerns about the cost of the event (P500).

Paolo Tioseco, a Technology Specialist for Microsoft Philippines asked me to post the event details at DevPinoy.org and I've decided to create my own banner based on their original poster.

Oh! and I have a small one too!

Tech is fun!

Friday, March 07, 2008 1:25:30 AM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

{Filipino} Heroes happen {here}#

My wife and I went to the Heroes Happen {here} event in Los Angeles, CA last month and boy, it was a blast! The event was a fullhouse with hundreds of developers and IT professionals attending this big day. My wife took some photos of me at the event during idle time and this is what came up.

{ Staring at (IT) Heroes }

---

{ Is dot you? }

---

{ Waiting to launch }

---

{ Curly-braced couple }

---

{ I was there! }

---

{ DevPinoy.org was there too! =) }

---

{ Someday, in God's time DevPinoy will be a platinum sponsor in one the Microsoft events. Heheh!
My wife told me to take a picture of this banner and put the DevPinoy logo to it and right there and then I caught a vision. }

---

We had fun that day. I'm really thankful that my wife is a techie like me because we can go to the same conference and enjoy the same technology. I saw Woody at the event and as always he is a cool guy. Hmmm.. I wonder if all MS Developer Evangelist are like him. Hehehe!

The next launch event that we are going to attend is the San Diego launch event which is happening sometime around May. Yipee!

Wednesday, March 05, 2008 3:17:39 AM (GMT Standard Time, UTC+00:00) #    Comments [0]  | 

 

All content © 2010, Keith Rull
On this page
This site
Calendar
<September 2010>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789
Archives
Sitemap
Blogroll OPML
Disclaimer

Powered by: newtelligence dasBlog 2.3.9074.18820

The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

Send mail to the author(s) E-mail

Theme design by Jelle Druyts


Pick a theme: