XML專題文章收集整理 解析.Net框架下的XML程式設計技術
一.前言:
XML是微軟.Net戰略的一個重要組成部分,而且它可謂是XML Web服務的基石,所以掌握.Net框架下的XML技術自然顯得非常重要了。本文將指導大家如何運用C#語言完成.Net框架下的XML文件的讀寫操作。首先,我會向大家介紹.Net框架中與XML相關的名稱空間和其中的重要類。其次,我還會給出有關的例項以使讀者更進一步的瞭解XML文件的讀寫操作的具體方法。
二.XML名稱空間和相關類簡介:
在深入進行.Net框架下的XML文件的操作之前,我想很有必要向大家介紹.Net框架中與XML技術有關的名稱空間和其中一些重要的類。.Net框架為我們提供了以下一些名稱空間:System.Xml、System.Xml.Schema、System.Xml.Serialization、System.Xml.Xpath以及 System.Xml.Xsl來包容和XML操作相關的類。
System.Xml名稱空間包含了一些最重要的XML類,其中最主要的類是和XML文件的讀寫操作相關的類。這些類中包括4個與讀相關的類以及2個與寫相關的類。它們分別是:XmlReader、XmlTextReader、XmlValidatingReader、XmlNodeReader、XmlWriter以及 XmlTextWriter。本文將重點介紹這些類,因為它們是最基本也是最重要的類。
XmlReader類是一個虛基類,它包含了讀XML文件的方法和屬性。該類中的Read方法是一個基本的讀XML文件的方法,它以流形式讀取XML文件中的節點(Node)。另外,該類還提供了ReadString、ReadInnerXml、ReadOuterXml和ReadStartElement等更高階的讀方法。除了提供讀XML文件的方法外,XmlReader類還為程式設計師提供了MoveToAttribute、MoveToFirstAttribute、MoveToContent、MoveToFirstContent、MoveToElement以及 MoveToNextAttribute等具有導航功能的方法。在本文後面介紹的例項中,我們將運用到這些方法。
XmlTextReader、XmlNodeReader以及XmlValidatingReader等類是從XmlReader類繼承過來的子類。根據它們的名稱,我們可以知道其作用分別是讀取文字內容、讀取節點和讀取XML模式(Schemas)。
XmlWriter類為程式設計師提供了許多寫XML文件的方法,它是XmlTextWriter類的基類,我在後面的例項中會給出相關的運用方法。
XmlNode類是一個非常重要的類,它代表了XML文件中的某個節點。該節點可以是XML文件的根節點,這樣它就代表整個XML文件了。它是許多很有用的類的基類,這些類包括插入節點的類、刪除節點的類、替換節點的類以及在XML文件中完成導航功能的類。同時,XmlNode類還為程式設計師提供了獲取雙親節點、子節點、最後一個子節點、節點名稱以及節點型別等的屬性。它的三個最主要的子類包括:XmlDocument、XmlDataDocument以及XmlDocumentFragment。XmlDocument類代表了一個XML文件,它提供了載入和儲存XML文件的方法和屬性。這些方法包括了Load、LoadXml和Save等。同時,它還提供了新增特性(Attributes)、說明(Comments)、空間(Spaces)、元素(Elements)和新節點(New Nodes)等XML項的功能。XmlDocumentFragment類代表了一部分XML文件,它能被用來新增到其他的XML文件中。XmlDataDocument類可以讓程式設計師更好地完成和ADO.NET中的資料集物件之間的互操作。
除了上面介紹的System.Xml名稱空間中的類外,該名稱空間還包括了XmlConvert、XmlLinkedNode以及XmlNodeList等類,不過這些類不是本文介紹的重點,有興趣的讀者不妨去參考相關文件資料。
System.Xml.Schema名稱空間中包含了和XML模式相關的類,這些類包括XmlSchema、XmlSchemaAll、XmlSchemaXPath以及XmlSchemaType等類。
System.Xml.Serialization名稱空間中包含了和XML文件的序列化和反序列化操作相關的類,XML文件的序列化操作能將XML格式的資料轉化為流格式的資料並能在網路中傳輸,而反序列化則完成相反的操作,即將流格式的資料還原成XML格式的資料。
System.Xml.XPath名稱空間包含了XPathDocument、XPathExression、XPathNavigator以及XPathNodeIterator等類,這些類能完成XML文件的導航功能。在XPathDocument類的協助下,XPathNavigator類能完成快速的XML文件導航功能,該類為程式設計師提供了許多Move方法以完成導航功能。
System.Xml.Xsl名稱空間中的類完成了XSLT的轉換功能。
三.讀XML文件的方法:
在介紹完.Net框架中和XML有關的名稱空間和相關類後,我接著向大家介紹和XML相關的一些操作。首先,我向大家介紹的讀取XML文件的方法。在下面的例項程式中,我將運用VS.net開發工具附帶的"books.xml"檔案來作為示例。你可以在你的機器上搜尋到該檔案(或請參考附錄),或者你也可以運用其他的XML檔案。
首先,我們用XmlTextReader類的物件來讀取該XML文件。方法很簡單,就是在建立新物件的建構函式中指明XML檔案的位置即可。
XmlTextReader textReader = new XmlTextReader("C:\\books.xml");
一旦新物件建立完畢,你就可以呼叫其Read方法來讀取XML文件了。呼叫Read方法之後,資訊被儲存起來,你可以通過讀取該物件的Name、BaseURI、Depth、LineNumber等屬性來獲取這些資訊。下面我給出一個完整的例項,該例項通過簡單的讀取"books.xml"檔案,然後將其中的資訊顯示在控制檯中。
using System;
using System.Xml;
namespace ReadXml
{
class Class1
{
static void Main( string[] args )
{
// 建立一個XmlTextReader類的物件並呼叫Read方法來讀取檔案
XmlTextReader textReader = new XmlTextReader("C:\\books.xml");
textReader.Read();
// 節點非空則執行迴圈體
while ( textReader.Read() )
{
// 讀取第一個元素
textReader.MoveToElement();
Console.WriteLine("XmlTextReader Properties Test");
Console.WriteLine("===================");
// 讀取該元素的屬性並顯示在控制檯中
Console.WriteLine("Name:" + textReader.Name);
Console.WriteLine("Base URI:" + textReader.BaseURI);
Console.WriteLine("Local Name:" + textReader.LocalName);
Console.WriteLine("Attribute Count:" + textReader.AttributeCount.ToString());
Console.WriteLine("Depth:" + textReader.Depth.ToString());
Console.WriteLine("Line Number:" + textReader.LineNumber.ToString());
Console.WriteLine("Node Type:" + textReader.NodeType.ToString());
Console.WriteLine("Attribute Count:" + textReader.Value.ToString());
}
}
}
}
XmlTextReader類中有一個很重要的屬性-NodeType,通過該屬性,我們可以知道其節點的節點型別。而列舉型別XmlNodeType中包含了諸如Attribute、CDATA、Element、Comment、Document、DocumentType、Entity、ProcessInstruction以及WhiteSpace等的XML項的型別。通過與XmlNodeType中的元素的比較,我們可以獲取相應節點的節點型別並對其完成相關的操作。下面我就給出一個例項,該例項讀取每個節點的NodeType,並根據其節點型別顯示其中的內容,同時程式還記錄了XML檔案中每種節點型別的數目。
using System;
using System.Xml;
namespace ReadXML
{
class Class2
{
static void Main( string[] args )
{
int ws = 0;
int pi = 0;
int dc = 0;
int cc = 0;
int ac = 0;
int et = 0;
int el = 0;
int xd = 0;
XmlTextReader textReader = new XmlTextReader("C:\\books.xml");
while (textReader.Read())
{
XmlNodeType nType = textReader.NodeType;
// 節點型別為XmlDeclaration
if (nType == XmlNodeType.XmlDeclaration)
{
Console.WriteLine("Declaration:" + textReader.Name.ToString());
xd = xd + 1;
}
// 節點型別為Comment
if( nType == XmlNodeType.Comment)
{
Console.WriteLine("Comment:" + textReader.Name.ToString());
cc = cc + 1;
}
// 節點型別為Attribute
if( nType == XmlNodeType.Attribute)
{
Console.WriteLine("Attribute:" + textReader.Name.ToString());
ac = ac + 1;
}
// 節點型別為Element
if ( nType == XmlNodeType.Element)
{
Console.WriteLine("Element:" + textReader.Name.ToString());
el = el + 1;
}
// 節點型別為Entity
if ( nType == XmlNodeType.Entity )
{
Console.WriteLine("Entity:" + textReader.Name.ToString());
et = et + 1;
}
// 節點型別為Process Instruction
if( nType == XmlNodeType. ProcessInstruction )
{
Console.WriteLine("Process Instruction:" + textReader.Name.ToString());
pi = pi + 1;
}
// 節點型別為DocumentType
if( nType == XmlNodeType.DocumentType)
{
Console.WriteLine("DocumentType:" + textReader.Name.ToString());
dc = dc + 1;
}
// 節點型別為Whitespace
if ( nType == XmlNodeType.Whitespace )
{
Console.WriteLine("WhiteSpace:" + textReader.Name.ToString());
ws = ws + 1;
}
}
// 在控制檯中顯示每種型別的數目
Console.WriteLine("Total Comments:" + cc.ToString());
Console.WriteLine("Total Attributes:" + ac.ToString());
Console.WriteLine("Total Elements:" + el.ToString());
Console.WriteLine("Total Entity:" + et.ToString());
Console.WriteLine("Total Process Instructions:" + pi.ToString());
Console.WriteLine("Total Declaration:" + xd.ToString());
Console.WriteLine("Total DocumentType:" + dc.ToString());
Console.WriteLine("Total WhiteSpaces:" + ws.ToString());
}
}
}
以上,我向大家介紹瞭如何運用XmlTextReader類的物件來讀取XML文件,並根據節點的NodeType屬性來取得其節點型別資訊。同時XmlReader這個基類還有XmlNodeReader和XmlValidatingReader等派生類,它們分別是用來讀取XML文件的節點和模式的。限於篇幅,這裡就不介紹了,讀者可以參考有關資料。
四.寫XML文件的方法:
XmlWriter類包含了寫XML文件所需的方法和屬性,它是XmlTextWriter類和XmlNodeWriter類的基類。該類包含了WriteNode、WriteString、WriteAttributes、WriteStartElement以及WriteEndElement等一系列寫XML文件的方法,其中有些方法是成對出現的。比如你要寫入一個元素,你首先得呼叫WriteStartElement方法,接著寫入實際內容,最後是呼叫WriteEndElement方法以表示結束。該類還包含了WriteState、XmlLang和XmlSpace等屬性,其中WriteState屬性表明了寫的狀態。因為XmlWriter類包含了很多寫XML文件的方法,所以這裡只是介紹最主要的幾種。下面我們通過其子類XmlTextWriter類來說明如何寫XML文件。
首先,我們要建立一個XmlTextWriter類的例項物件。該類的建構函式XmlTextWriter有三種過載形式,其引數分別為一個字串、一個流物件和一個TextWriter物件。這裡我們運用字串的引數形式,該字串就指明瞭所要建立的XML檔案的位置,方法如下:
XmlTextWriter textWriter = New XmlTextWriter("C:\\myXmFile.xml", null);
在建立完物件後,我們呼叫WriterStartDocument方法開始寫XML文件,在完成寫工作後,就呼叫WriteEndDocument結束寫過程並呼叫Close方法將它關閉。在寫的過程中,我們可以呼叫WriteComment方法來新增說明,通過呼叫WriteString方法來新增一個字串,通過呼叫WriteStartElement和WriteEndElement方法對來新增一個元素,通過呼叫WriteStartAttribute和WriteEndAttribute方法對來新增一個屬性。我們還可以通過呼叫WriteNode方法來新增整一個節點,其它的寫的方法還包括WriteProcessingInstruction和WriteDocType等等。下面的例項就是介紹如何具體運用這些方法來完成XML文件的寫工作的。
using System;
using System.Xml;
namespace WriteXML
{
class Class1
{
static void Main( string[] args )
{
// 建立XmlTextWriter類的例項物件
XmlTextWriter textWriter = new XmlTextWriter("C:\\myXmFile.xml", null);
// 開始寫過程,呼叫WriteStartDocument方法
textWriter.WriteStartDocument();
// 寫入說明
textWriter.WriteComment("First Comment XmlTextWriter Sample Example");
textWriter.WriteComment("myXmlFile.xml in root dir");
// 寫入一個元素
textWriter.WriteStartElement("Name", "");
textWriter.WriteString("Student");
textWriter.WriteEndElement();
// 再寫入一個元素
textWriter.WriteStartElement("Address", "");
textWriter.WriteString("Colony");
textWriter.WriteEndElement();
// 寫入字元
char [] ch = new char[3];
ch[0] = ''a'';
ch[1] = ''r'';
ch[2] = ''c'';
textWriter.WriteStartElement("Char");
textWriter.WriteChars(ch, 0, ch.Length);
textWriter.WriteEndElement();
// 寫文件結束,呼叫WriteEndDocument方法
textWriter.WriteEndDocument();
// 關閉textWriter
textWriter.Close();
}
}
}
五.運用XmlDocument類:
XmlDocument類的物件代表了一個XML文件,它也是一個非常重要的XML類。該類包含了Load、LoadXml以及Save等重要的方法。其中Load方法可以從一個字串指定的XML檔案或是一個流物件、一個TextReader物件、一個XmlReader物件匯入XML資料。LoadXml方法則完成從一個特定的XML檔案匯入XML資料的功能。它的Save方法則將XML資料儲存到一個XML檔案中或是一個流物件、一個TextWriter物件、一個XmlWriter物件中。
下面的程式中我們用到了XmlDocument類物件的LoadXml方法,它從一個XML文件段中讀取XML資料並呼叫其Save方法將資料儲存在一個檔案中。
// 建立一個XmlDocument類的物件
XmlDocument doc = new XmlDocument();
doc.LoadXml(("Tommy Lex "));
// 儲存到檔案中
doc.Save("C:\\student.xml");
這裡,我們還可以通過改變Save方法中引數,將XML資料顯示在控制檯中,方法如下:
doc.Save(Console.Out);
而在下面的程式中,我們用到了一個XmlTextReader物件,通過它我們讀取"books.xml"檔案中的XML資料。然後建立一個XmlDocument物件並載入XmlTextReader物件,這樣XML資料就被讀到XmlDocument物件中了。最後,通過該物件的Save方法將XML資料顯示在控制檯中。
XmlDocument doc = new XmlDocument();
// 建立一個XmlTextReader物件,讀取XML資料
XmlTextReader reader = new XmlTextReader("c:\\books.xml");
reader.Read();
// 載入XmlTextReader類的物件
doc.Load(reader);
// 將XML資料顯示在控制檯中
doc.Save(Console.Out);
六.總結:
XML技術作為.Net的基石,其重要性自然不言而喻。.Net框架包含了五個名稱空間和大量的類來支援與XML技術有關的操作。其中System.Xml是最重要的一個名稱空間,其中的XmlReader類和XmlWriter類以及它們的派生類完成了XML文件的讀寫操作,是最基本也是最重要的類。XmlDocument類代表了XML文件,它能完成與整個XML文件相關的各類操作,同時和其相關的XmlDataDocument類也是非常重要的,值得讀者的深入研究。
附錄
"books.xml"檔案如下:
<!-- This file represents a fragment of a book store inventory database -->
The Autobiography of Benjamin Franklin
Benjamin
Franklin
8.99
The Confidence Man
Herman
Melville
11.99
The Gorgias
Sidas
Plato
9.99
XML是微軟.Net戰略的一個重要組成部分,而且它可謂是XML Web服務的基石,所以掌握.Net框架下的XML技術自然顯得非常重要了。本文將指導大家如何運用C#語言完成.Net框架下的XML文件的讀寫操作。首先,我會向大家介紹.Net框架中與XML相關的名稱空間和其中的重要類。其次,我還會給出有關的例項以使讀者更進一步的瞭解XML文件的讀寫操作的具體方法。
二.XML名稱空間和相關類簡介:
在深入進行.Net框架下的XML文件的操作之前,我想很有必要向大家介紹.Net框架中與XML技術有關的名稱空間和其中一些重要的類。.Net框架為我們提供了以下一些名稱空間:System.Xml、System.Xml.Schema、System.Xml.Serialization、System.Xml.Xpath以及 System.Xml.Xsl來包容和XML操作相關的類。
System.Xml名稱空間包含了一些最重要的XML類,其中最主要的類是和XML文件的讀寫操作相關的類。這些類中包括4個與讀相關的類以及2個與寫相關的類。它們分別是:XmlReader、XmlTextReader、XmlValidatingReader、XmlNodeReader、XmlWriter以及 XmlTextWriter。本文將重點介紹這些類,因為它們是最基本也是最重要的類。
XmlReader類是一個虛基類,它包含了讀XML文件的方法和屬性。該類中的Read方法是一個基本的讀XML文件的方法,它以流形式讀取XML文件中的節點(Node)。另外,該類還提供了ReadString、ReadInnerXml、ReadOuterXml和ReadStartElement等更高階的讀方法。除了提供讀XML文件的方法外,XmlReader類還為程式設計師提供了MoveToAttribute、MoveToFirstAttribute、MoveToContent、MoveToFirstContent、MoveToElement以及 MoveToNextAttribute等具有導航功能的方法。在本文後面介紹的例項中,我們將運用到這些方法。
XmlTextReader、XmlNodeReader以及XmlValidatingReader等類是從XmlReader類繼承過來的子類。根據它們的名稱,我們可以知道其作用分別是讀取文字內容、讀取節點和讀取XML模式(Schemas)。
XmlWriter類為程式設計師提供了許多寫XML文件的方法,它是XmlTextWriter類的基類,我在後面的例項中會給出相關的運用方法。
XmlNode類是一個非常重要的類,它代表了XML文件中的某個節點。該節點可以是XML文件的根節點,這樣它就代表整個XML文件了。它是許多很有用的類的基類,這些類包括插入節點的類、刪除節點的類、替換節點的類以及在XML文件中完成導航功能的類。同時,XmlNode類還為程式設計師提供了獲取雙親節點、子節點、最後一個子節點、節點名稱以及節點型別等的屬性。它的三個最主要的子類包括:XmlDocument、XmlDataDocument以及XmlDocumentFragment。XmlDocument類代表了一個XML文件,它提供了載入和儲存XML文件的方法和屬性。這些方法包括了Load、LoadXml和Save等。同時,它還提供了新增特性(Attributes)、說明(Comments)、空間(Spaces)、元素(Elements)和新節點(New Nodes)等XML項的功能。XmlDocumentFragment類代表了一部分XML文件,它能被用來新增到其他的XML文件中。XmlDataDocument類可以讓程式設計師更好地完成和ADO.NET中的資料集物件之間的互操作。
除了上面介紹的System.Xml名稱空間中的類外,該名稱空間還包括了XmlConvert、XmlLinkedNode以及XmlNodeList等類,不過這些類不是本文介紹的重點,有興趣的讀者不妨去參考相關文件資料。
System.Xml.Schema名稱空間中包含了和XML模式相關的類,這些類包括XmlSchema、XmlSchemaAll、XmlSchemaXPath以及XmlSchemaType等類。
System.Xml.Serialization名稱空間中包含了和XML文件的序列化和反序列化操作相關的類,XML文件的序列化操作能將XML格式的資料轉化為流格式的資料並能在網路中傳輸,而反序列化則完成相反的操作,即將流格式的資料還原成XML格式的資料。
System.Xml.XPath名稱空間包含了XPathDocument、XPathExression、XPathNavigator以及XPathNodeIterator等類,這些類能完成XML文件的導航功能。在XPathDocument類的協助下,XPathNavigator類能完成快速的XML文件導航功能,該類為程式設計師提供了許多Move方法以完成導航功能。
System.Xml.Xsl名稱空間中的類完成了XSLT的轉換功能。
三.讀XML文件的方法:
在介紹完.Net框架中和XML有關的名稱空間和相關類後,我接著向大家介紹和XML相關的一些操作。首先,我向大家介紹的讀取XML文件的方法。在下面的例項程式中,我將運用VS.net開發工具附帶的"books.xml"檔案來作為示例。你可以在你的機器上搜尋到該檔案(或請參考附錄),或者你也可以運用其他的XML檔案。
首先,我們用XmlTextReader類的物件來讀取該XML文件。方法很簡單,就是在建立新物件的建構函式中指明XML檔案的位置即可。
XmlTextReader textReader = new XmlTextReader("C:\\books.xml");
一旦新物件建立完畢,你就可以呼叫其Read方法來讀取XML文件了。呼叫Read方法之後,資訊被儲存起來,你可以通過讀取該物件的Name、BaseURI、Depth、LineNumber等屬性來獲取這些資訊。下面我給出一個完整的例項,該例項通過簡單的讀取"books.xml"檔案,然後將其中的資訊顯示在控制檯中。
using System;
using System.Xml;
namespace ReadXml
{
class Class1
{
static void Main( string[] args )
{
// 建立一個XmlTextReader類的物件並呼叫Read方法來讀取檔案
XmlTextReader textReader = new XmlTextReader("C:\\books.xml");
textReader.Read();
// 節點非空則執行迴圈體
while ( textReader.Read() )
{
// 讀取第一個元素
textReader.MoveToElement();
Console.WriteLine("XmlTextReader Properties Test");
Console.WriteLine("===================");
// 讀取該元素的屬性並顯示在控制檯中
Console.WriteLine("Name:" + textReader.Name);
Console.WriteLine("Base URI:" + textReader.BaseURI);
Console.WriteLine("Local Name:" + textReader.LocalName);
Console.WriteLine("Attribute Count:" + textReader.AttributeCount.ToString());
Console.WriteLine("Depth:" + textReader.Depth.ToString());
Console.WriteLine("Line Number:" + textReader.LineNumber.ToString());
Console.WriteLine("Node Type:" + textReader.NodeType.ToString());
Console.WriteLine("Attribute Count:" + textReader.Value.ToString());
}
}
}
}
XmlTextReader類中有一個很重要的屬性-NodeType,通過該屬性,我們可以知道其節點的節點型別。而列舉型別XmlNodeType中包含了諸如Attribute、CDATA、Element、Comment、Document、DocumentType、Entity、ProcessInstruction以及WhiteSpace等的XML項的型別。通過與XmlNodeType中的元素的比較,我們可以獲取相應節點的節點型別並對其完成相關的操作。下面我就給出一個例項,該例項讀取每個節點的NodeType,並根據其節點型別顯示其中的內容,同時程式還記錄了XML檔案中每種節點型別的數目。
using System;
using System.Xml;
namespace ReadXML
{
class Class2
{
static void Main( string[] args )
{
int ws = 0;
int pi = 0;
int dc = 0;
int cc = 0;
int ac = 0;
int et = 0;
int el = 0;
int xd = 0;
XmlTextReader textReader = new XmlTextReader("C:\\books.xml");
while (textReader.Read())
{
XmlNodeType nType = textReader.NodeType;
// 節點型別為XmlDeclaration
if (nType == XmlNodeType.XmlDeclaration)
{
Console.WriteLine("Declaration:" + textReader.Name.ToString());
xd = xd + 1;
}
// 節點型別為Comment
if( nType == XmlNodeType.Comment)
{
Console.WriteLine("Comment:" + textReader.Name.ToString());
cc = cc + 1;
}
// 節點型別為Attribute
if( nType == XmlNodeType.Attribute)
{
Console.WriteLine("Attribute:" + textReader.Name.ToString());
ac = ac + 1;
}
// 節點型別為Element
if ( nType == XmlNodeType.Element)
{
Console.WriteLine("Element:" + textReader.Name.ToString());
el = el + 1;
}
// 節點型別為Entity
if ( nType == XmlNodeType.Entity )
{
Console.WriteLine("Entity:" + textReader.Name.ToString());
et = et + 1;
}
// 節點型別為Process Instruction
if( nType == XmlNodeType. ProcessInstruction )
{
Console.WriteLine("Process Instruction:" + textReader.Name.ToString());
pi = pi + 1;
}
// 節點型別為DocumentType
if( nType == XmlNodeType.DocumentType)
{
Console.WriteLine("DocumentType:" + textReader.Name.ToString());
dc = dc + 1;
}
// 節點型別為Whitespace
if ( nType == XmlNodeType.Whitespace )
{
Console.WriteLine("WhiteSpace:" + textReader.Name.ToString());
ws = ws + 1;
}
}
// 在控制檯中顯示每種型別的數目
Console.WriteLine("Total Comments:" + cc.ToString());
Console.WriteLine("Total Attributes:" + ac.ToString());
Console.WriteLine("Total Elements:" + el.ToString());
Console.WriteLine("Total Entity:" + et.ToString());
Console.WriteLine("Total Process Instructions:" + pi.ToString());
Console.WriteLine("Total Declaration:" + xd.ToString());
Console.WriteLine("Total DocumentType:" + dc.ToString());
Console.WriteLine("Total WhiteSpaces:" + ws.ToString());
}
}
}
以上,我向大家介紹瞭如何運用XmlTextReader類的物件來讀取XML文件,並根據節點的NodeType屬性來取得其節點型別資訊。同時XmlReader這個基類還有XmlNodeReader和XmlValidatingReader等派生類,它們分別是用來讀取XML文件的節點和模式的。限於篇幅,這裡就不介紹了,讀者可以參考有關資料。
四.寫XML文件的方法:
XmlWriter類包含了寫XML文件所需的方法和屬性,它是XmlTextWriter類和XmlNodeWriter類的基類。該類包含了WriteNode、WriteString、WriteAttributes、WriteStartElement以及WriteEndElement等一系列寫XML文件的方法,其中有些方法是成對出現的。比如你要寫入一個元素,你首先得呼叫WriteStartElement方法,接著寫入實際內容,最後是呼叫WriteEndElement方法以表示結束。該類還包含了WriteState、XmlLang和XmlSpace等屬性,其中WriteState屬性表明了寫的狀態。因為XmlWriter類包含了很多寫XML文件的方法,所以這裡只是介紹最主要的幾種。下面我們通過其子類XmlTextWriter類來說明如何寫XML文件。
首先,我們要建立一個XmlTextWriter類的例項物件。該類的建構函式XmlTextWriter有三種過載形式,其引數分別為一個字串、一個流物件和一個TextWriter物件。這裡我們運用字串的引數形式,該字串就指明瞭所要建立的XML檔案的位置,方法如下:
XmlTextWriter textWriter = New XmlTextWriter("C:\\myXmFile.xml", null);
在建立完物件後,我們呼叫WriterStartDocument方法開始寫XML文件,在完成寫工作後,就呼叫WriteEndDocument結束寫過程並呼叫Close方法將它關閉。在寫的過程中,我們可以呼叫WriteComment方法來新增說明,通過呼叫WriteString方法來新增一個字串,通過呼叫WriteStartElement和WriteEndElement方法對來新增一個元素,通過呼叫WriteStartAttribute和WriteEndAttribute方法對來新增一個屬性。我們還可以通過呼叫WriteNode方法來新增整一個節點,其它的寫的方法還包括WriteProcessingInstruction和WriteDocType等等。下面的例項就是介紹如何具體運用這些方法來完成XML文件的寫工作的。
using System;
using System.Xml;
namespace WriteXML
{
class Class1
{
static void Main( string[] args )
{
// 建立XmlTextWriter類的例項物件
XmlTextWriter textWriter = new XmlTextWriter("C:\\myXmFile.xml", null);
// 開始寫過程,呼叫WriteStartDocument方法
textWriter.WriteStartDocument();
// 寫入說明
textWriter.WriteComment("First Comment XmlTextWriter Sample Example");
textWriter.WriteComment("myXmlFile.xml in root dir");
// 寫入一個元素
textWriter.WriteStartElement("Name", "");
textWriter.WriteString("Student");
textWriter.WriteEndElement();
// 再寫入一個元素
textWriter.WriteStartElement("Address", "");
textWriter.WriteString("Colony");
textWriter.WriteEndElement();
// 寫入字元
char [] ch = new char[3];
ch[0] = ''a'';
ch[1] = ''r'';
ch[2] = ''c'';
textWriter.WriteStartElement("Char");
textWriter.WriteChars(ch, 0, ch.Length);
textWriter.WriteEndElement();
// 寫文件結束,呼叫WriteEndDocument方法
textWriter.WriteEndDocument();
// 關閉textWriter
textWriter.Close();
}
}
}
五.運用XmlDocument類:
XmlDocument類的物件代表了一個XML文件,它也是一個非常重要的XML類。該類包含了Load、LoadXml以及Save等重要的方法。其中Load方法可以從一個字串指定的XML檔案或是一個流物件、一個TextReader物件、一個XmlReader物件匯入XML資料。LoadXml方法則完成從一個特定的XML檔案匯入XML資料的功能。它的Save方法則將XML資料儲存到一個XML檔案中或是一個流物件、一個TextWriter物件、一個XmlWriter物件中。
下面的程式中我們用到了XmlDocument類物件的LoadXml方法,它從一個XML文件段中讀取XML資料並呼叫其Save方法將資料儲存在一個檔案中。
// 建立一個XmlDocument類的物件
XmlDocument doc = new XmlDocument();
doc.LoadXml(("
// 儲存到檔案中
doc.Save("C:\\student.xml");
這裡,我們還可以通過改變Save方法中引數,將XML資料顯示在控制檯中,方法如下:
doc.Save(Console.Out);
而在下面的程式中,我們用到了一個XmlTextReader物件,通過它我們讀取"books.xml"檔案中的XML資料。然後建立一個XmlDocument物件並載入XmlTextReader物件,這樣XML資料就被讀到XmlDocument物件中了。最後,通過該物件的Save方法將XML資料顯示在控制檯中。
XmlDocument doc = new XmlDocument();
// 建立一個XmlTextReader物件,讀取XML資料
XmlTextReader reader = new XmlTextReader("c:\\books.xml");
reader.Read();
// 載入XmlTextReader類的物件
doc.Load(reader);
// 將XML資料顯示在控制檯中
doc.Save(Console.Out);
六.總結:
XML技術作為.Net的基石,其重要性自然不言而喻。.Net框架包含了五個名稱空間和大量的類來支援與XML技術有關的操作。其中System.Xml是最重要的一個名稱空間,其中的XmlReader類和XmlWriter類以及它們的派生類完成了XML文件的讀寫操作,是最基本也是最重要的類。XmlDocument類代表了XML文件,它能完成與整個XML文件相關的各類操作,同時和其相關的XmlDataDocument類也是非常重要的,值得讀者的深入研究。
附錄
"books.xml"檔案如下:
<!-- This file represents a fragment of a book store inventory database -->
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-630017/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 解析.Net框架下的XML程式設計技術框架XML程式設計
- XML解析技術XML
- XML 程式設計思想:知識管理的基本 XML 和 RDF 技術:問題跟蹤程式模式(轉)XML程式設計模式
- XML 程式設計思想:知識管理的基本 XML 和 RDF 技術(7)(轉)XML程式設計
- XML 程式設計思想:查詢 XML 格式的 WordNet(轉)XML程式設計
- XML 程式設計思想:XML 建模藝術描述(轉)XML程式設計
- Java XML程式設計例項解析JavaXML程式設計
- XML 程式設計思想: 專利編檔遭遇 XML(轉)XML程式設計
- XML 程式設計思想:知識管理的基本 XML 和 RDF 技術:語義知識(轉)XML程式設計
- java的XML解析(DOM4J技術)JavaXML
- XML 程式設計思想:XML語義(轉)XML程式設計
- XML 程式設計思想: Harold 的高效 XML 設計原則(轉)XML程式設計
- XML 程式設計思想:XML和語義(轉)XML程式設計
- XML 程式設計思想: 研讀XML Hacks(轉)XML程式設計
- XML 程式設計思想: XML 語義錨(轉)XML程式設計
- Java程式設計師的10道XML面試題Java程式設計師XML面試題
- shell vbscript xml程式設計XML程式設計
- :Android網路程式設計--XML之解析方式:SAXAndroid程式設計XML
- 解析xml 成bool的問題XML
- XML 程式設計思想:XML和語義:XML 會兌現其承諾嗎?(轉)XML程式設計
- XML入門指南(19)XML相關技術(轉)XML
- Xml解析XML
- XML 程式設計思想: XMLOpen 會議,再評 XML Hacks(轉)XML程式設計
- Python解析xml[xml.dom]PythonXML
- XML程式設計例項(二) (轉)XML程式設計
- XML與ASP程式設計(一) (轉)XML程式設計
- iOS – XML解析iOSXML
- go 解析xmlGoXML
- xml php 解析XMLPHP
- iOS - XML解析iOSXML
- 【Java】解析xmlJavaXML
- Java解析XMLJavaXML
- jaxb解析xmlXML
- DOM解析XMLXML
- 利用JAXP解析xml中遇到的問題XML
- XML 程式設計思想:重新審視 XML 中的語義透明性(轉)XML程式設計
- XML 程式設計思想:從書本學習 XML Topic Maps(轉)XML程式設計
- XML 程式設計思想:Thinking XML: 通用商業語言(UBL)(轉)XML程式設計Thinking