Saving and Opening an XML File |
|
Introduction |
Probably the most common way to create an XML file in Microsoft Windows consists of using Notepad or any other text editor. After opening the text editor, you can enter the necessary lines of code. After creating the file, you must save it. When saving it, you can include the name of the file in double-quotes: |
You can also first set the Save As Type combo box to All Files and then enter the name of the file with the .xml extension. To assist you with creating XML Files, Microsoft Visual C# includes an XML File option in the Add New Item dialog box. After selecting this option, you can accept the suggested name of the file or replace it in the Name text box. If you don't specify the extension, the wizard would add it for you.
If you call the XmlDocument.LoadXml() method, only the XML code is created, not the file. To actually create the Windows file, you can call the XmlDocument.Save() method. This method is provided in four versions. One of the versions takes as argument a string value. The syntax of this method is: public virtual void Save(string filename); The argument must be a valid filename and must include the .xml extension. If you pass a string without backlashes, the file would be created in the same folder as the current project. If you want the file to be created somewhere else (in a different directory), pass the whole path.
Whether you created an XML file or someone else did, you can open it easily to view its contents. The easiest way to open an XML file is to use a text editor, such as Notepad. Because the Code Editor has a friendlier appearance and it is available to you, it is a better candidate. To open an XML file, on the main menu, you can click File -> Open File..., locate the file, and click Open. After creating an XML file, one way you can use it is to display it in a grid-based window such as a spreadsheet.
Another way you can display an XML file is in a browser. To do this, if you see the file in Windows Explorer or in My Documents, you can double-click it. Here is an example:
At times, you will need to programmatically access an XML file. To support this operation, the XmlDocument class provides the Load() method which is available in various versions. One of the syntaxes used by this method is: public virtual void Load(string filename); This version takes as argument the name or path of the file. Here is an example of calling it: private void btnDocument_Click(object sender, EventArgs e) { XmlDocument docMusicCollection = new XmlDocument(); docMusicCollection.Load("music.xml"); } In this case, the compiler would look for the file in the (Release) folder of the current application. You can also provide a complete path to the file. Either way, if the compiler doesn't find the file, it would throw a FileNotFoundException exception. For this reason, it is cautious to first check that the file exists before opening it. This can be done as follows: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using System.IO; namespace MusicCollection { public partial class Exercise : Form { public Exercise() { InitializeComponent(); } private void btnDocument_Click(object sender, EventArgs e) { XmlDocument docMusicCollection = new XmlDocument(); string strFilename = "music.xml"; if (File.Exists(strFilename)) docMusicCollection.Load(strFilename); else MessageBox.Show("The file " + strFilename + " was not found"); } } } An alternative is to handle the exception yourself. You can also use a Stream-based object to identify the file. Once the object is ready, you can use the following version of the Load() method to open it: public virtual void Load(Stream inStream); This method expects a Stream type of object, such as a FileStream variable. Here is an example of calling it: private void btnDocument_Click(object sender, EventArgs e) { XmlDocument docMusicCollection = new XmlDocument(); string strFilename = "music.xml"; FileStream fstMusic = null; if (File.Exists(strFilename)) { fstMusic = new FileStream(strFilename, FileMode.Open, FileAccess.Read); docMusicCollection.Load(fstMusic); } else MessageBox.Show("The file " + strFilename + " was not found"); }
Many of the XML files you encounter will have been created by someone else. Still, because it is primarily a text document, you are expected to be able to read any XML file and figure out its content, or at least most of it. As mentioned already, you can open an XML file using a text editor such as Notepad. After opening the file, you can start by checking the document declaration, then move to other items. Another way you can explore an XML file consists of programmatically reading it. This is also referred to as parsing (the parser parses the document). To support reading an XML file, the .NET Framework provides the abstract XmlReader class as the ancestor of classes that can read an XML file. One of the classes derived from XmlReader is called XmlTextReader. The XmlTextReader class provides the ability to read the file from the left to the right sides and from the top to the bottom sections. This class has very important characteristics you must remember:
To programmatically read an XML file, you can start by declaring a variable of type XmlTextReader using one of its constructors, including the default. To specify the file you want to open and read, you can use the constructor whose syntax is the following : public XmlTextReader(string url); When using this method, pass the name of the file or its path as argument. Here is an example: private void btnDocument_Click(object sender, EventArgs e) { XmlDocument docMusicCollection = new XmlDocument(); string strFilename = "music.xml"; if (File.Exists(strFilename)) { XmlTextReader rdrXml = new XmlTextReader(strFilename); } else MessageBox.Show("The file " + strFilename + " was not found"); } You can also identify a file using a Stream-based object. Once the object is ready, you can pass it to the following constructor of the class: public XmlTextReader(Stream input); Here is an example: private void btnDocument_Click(object sender, EventArgs e) { string strFilename = "music.xml"; FileStream fstMusic = new FileStream(strFilename, FileMode.Open, FileAccess.Read); if (File.Exists(strFilename)) { XmlTextReader rdrMusic = new XmlTextReader(fstMusic); } else MessageBox.Show("The file " + strFilename + " was not found"); } To actually read the file, the XmlTextReader is equipped with the Read() method whose syntax is: public override bool Read(); As you may suspect, this method only tells you that it successfully read an item. It doesn't tell you what it read. As stated already, the XmlTextReader scans a file in a left-right-top-down approach. When it has read something, it returns true. If it didn't or couldn't read something, it returns false. Therefore, you can call it to read an item. If it succeeds, it returns true. After reading that item, you can call it again to move to the next item. If there is a next item, it reads it and returns true. But, if there is no next item, the Read() method would not be able to read it and it would return false. In other words, you can ask the Read() method to continuously read the items as long as it returns true. Once it cannot read an item, you can ask it to stop. To perform this exercise, you can use either a while or a do...while loop. This would be done as follows: private void btnDocument_Click(object sender, EventArgs e) { string strFilename = "music.xml"; FileStream fstMusic = new FileStream(strFilename, FileMode.Open, FileAccess.Read); if (File.Exists(strFilename)) { XmlTextReader rdrMusic = new XmlTextReader(fstMusic); do { // Read an item and return true // Continue reading as long as ... } while (rdrMusic.Read() == true); // ... as long as Read() returns true // Once Read() returns false, STOP!!! fstMusic.Close(); } else MessageBox.Show("The file " + strFilename + " was not found"); } To identify what was read, the XmlTextReader provides methods appropriate for the different types of item that an XML file can contain. Starting in the next lesson, we will review the types of items of a file. |
|
||
Previous | Copyright © 2007-2013, FunctionX | Next |
|