如果使用過MSXML3,那麼在.NET程序中使用XML將是一個相當簡單的過程。即時沒有接觸過MSXML3,也不要緊,你會發現使用.Net平台提供的相關類也是很容易的一件事情。
有兩種主要API可用於建立在XML文檔中的數據,它們包括只向前的無緩沖存取以及隨機存取,而且自始至終都使用到文檔對象模型DOM。有關這2個API的類位於System.XML集合中。
如果要快速有效地XML文檔中的數據,就需要使用XmlTextReader類。這個類采取“拉”模式處理方式,要比簡單XML API(SAX)中的“推”模式處理方式優越許多。使用XmlTextReader類之前首先要引用System.XML集合,在C#中是使用“using”關鍵字來引用,在Visual Basic中則是使用“imports”關鍵字。引用了集合後,就可以象下面的代碼所示開始例示讀操作了:
XmlTextReader reader = new XmlTextReader(pathToXMLDoc);
int elementCount = 0;
while (reader.Read()) {
if (reader.NodeType XMLNodeType.Element) {
elementCount++;
}
}
XmlTextReader類中有幾個不同的構造器,上面所示的負責接收一個XML文件的路徑作為字符串參數。
雖然只向前的“拉”模式處理相當有效率,但它卻是只讀的,所以不能允許執行插入、刪除或者更新XML文檔節點的操作。當需要對XML文檔施加的控制並需要更大的靈活性時,我們可以看一看文檔對象模型DOM。DOM API的功能將XML文檔中的每一個節點裝載到一個樹形結構中,看起來就象是一個“家譜”。內存中有了這個結構,隨機存取XML文檔中的不同節點就變得可行。
開始創建DOM樹形結構前,首先引用System.Xml集合,然後例示XMLDocument類:
XmlDocument xmlDoc = new XMLDocument();
xmlDoc.Load(pathToXMLDoc);
XmlNode root = XMLDoc.DocumentElement;
通過使用XmlDocument類中的相關方法,在樹形結構中添加節點的操作可以很容易地完成。下面的例子演示了如何從一個文件中裝載XML,然後在根節點root下添加一個子元素以及它的相關屬性:
XmlDocument xmlDoc = new XMLDocument();
XmlDoc.Load(pathToXMLDoc);
XmlElement root = XMLDoc.DocumentElement;
XMLElement newNode = doc.CreateElement("newNode");
newNode.SetAttribute("id","1");
root.AppendChild(newNode);
以上代碼執行後,將產生下面的XML文檔:
?XML version="1.0"?
root
newNode id="1"/
/root
當需要將包含XML的字符串裝載進DOM中時,可以使用XmlDocument類的LoadXml()方法。裝載進去後,就可以按照下面的方式操作XML:
string myXML = "rootsomeNodeHello/someNode/root";
XmlDocument xmlDoc = new XMLDocument();
xmlDoc.LoadXml(myXML);
//....manipulation or reading of the nodes can occur here
除了以上幾種,在System.XML集合中還有多種其他類可用於執行不同的任務。上面的介紹僅僅是淺嘗則止,大量的還需要的練習。
下面介紹如何使用XmlTextReader類讀取XML文檔,並將數據顯示輸出。
System.XML名稱空間中定義了兩個類-XmlReader與XmlTextReader,其中XmlTextReader類於XmlReader類,而XmlTextReader類就可以用於讀取XML文檔,這個文檔的Read函數將讀取文檔內容,直到節點尾部。
以下是具體的實現步驟:
1、引用名稱空間
因為相關XML的類是在System.XML名稱空間中定義的,所以第一件事情就是引用這個名稱空間:
using System.XML;
2、打開XML文檔
XmlTextReader類的構造器可用於打開一個XML文件。本例程的XML文件叫做xmltest.xml,位於C:“temp目錄下。打開文件c:“temp“xmltest.XML的命令
XmlTextReader reader = new XmlTextReader("C:““temp““xmltest.XML");
3、讀取數據
讀取XML文件的數據,可以使用XMLTextReader類的Read方法:
while ( reader.Read() )
{
Console.WriteLine(reader.Name);
}
4、完整執行代碼readXML.cs
namespace WriteToXML
{
using System;
using System.XML;
/// summary
/// Summary description for Class1.
/// /summary
public class Class1
{
public Class1()
{
}
public static int Main(string args)
{
try
{
XmlTextWriter writer = new XmlTextWriter("C:““temp““xmltest.XML", null);
writer.WriteStartDocument();
writer.WriteComment("Commentss: XMLWriter Test Program");
writer.WriteProcessingInstruction("Instruction","Person Record");
writer.WriteStartElement("p", "person", "urn:person");
writer.WriteStartElement("LastName","");
writer.WriteString("Chand");
writer.WriteEndElement();
writer.WriteStartElement("FirstName","");
writer.WriteString("Chand");
writer.WriteEndElement();
writer.WriteElementInt16("age","", 25);
writer.WriteEndDocument();
}
catch (Exception e)
{
Console.WriteLine ("Exception: {0}", e.ToString());
}
return 0;
}
}
}
要實現將XML數據插入到一個現存文檔或者一個新文檔中的目的,可以使用XmlNode類和XMLDocument類。具體的實現步驟
1、引用名稱空間
因為相關XML的類是在System.XML名稱空間中定義的,所以第一件事情就是引用這個名稱空間