青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++ Programmer's Cookbook

{C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

解析.Net框架下的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(("<Student type='regular' Section='B'><Name>Tommy Lex</Name></Student>"));

// 保存到文件中
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"文件如下:

<?xml version='1.0'?>
<!-- This file represents a fragment of a book store inventory database -->
<bookstore>
<book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<first-name>Sidas</first-name>
<last-name>Plato</last-name>
</author>
<price>9.99</price>
</book>
</bookstore>

posted on 2005-11-18 13:37 夢在天涯 閱讀(474) 評論(0)  編輯 收藏 引用 所屬分類: C#/.NET

公告

EMail:itech001#126.com

導航

統計

  • 隨筆 - 461
  • 文章 - 4
  • 評論 - 746
  • 引用 - 0

常用鏈接

隨筆分類

隨筆檔案

收藏夾

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

積分與排名

  • 積分 - 1815003
  • 排名 - 5

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲乱亚洲高清| 亚洲二区视频| 午夜精品久久久久久久久久久久久 | 亚洲黑丝在线| 亚洲电影一级黄| 亚洲国产一区在线观看| 亚洲福利视频二区| 一区二区久久久久| 亚洲欧美日韩精品在线| 久久国产精品网站| 亚洲电影自拍| 99re6这里只有精品视频在线观看| 99在线视频精品| 国产精品亚洲综合久久| 久久国产黑丝| 免费日韩av| 欧美人与禽性xxxxx杂性| 国产精品美女黄网| 激情视频一区二区| 99ri日韩精品视频| 久久av一区二区三区亚洲| 免费观看成人www动漫视频| 亚洲欧洲在线免费| 亚洲欧美大片| 免费不卡中文字幕视频| 国产精品欧美精品| 伊人成年综合电影网| 一本到12不卡视频在线dvd| 欧美在线啊v| 亚洲啪啪91| 久久九九热免费视频| 欧美日韩一区二区三| 国内一区二区在线视频观看| 国产精品无码专区在线观看| 伊人精品视频| 午夜精品国产更新| 欧美国产一区在线| 亚洲欧美日韩精品在线| 欧美精品久久久久a| 黑人一区二区| 午夜精品久久久久久久蜜桃app| 欧美国产三区| 久久久久久尹人网香蕉| 国产精品系列在线| 一区二区精品在线观看| 欧美二区在线播放| 久久精品国产免费看久久精品| 欧美日韩亚洲视频一区| 亚洲美女中文字幕| 美女免费视频一区| 午夜精品成人在线| 国产精品日韩专区| 亚洲一区精品电影| 亚洲每日在线| 欧美激情精品久久久久久久变态 | 国产免费亚洲高清| 一区二区免费在线播放| 亚洲人成网站色ww在线| 美女日韩欧美| 亚洲电影成人| 麻豆国产精品一区二区三区| 午夜精品久久久久久久白皮肤| 国产精品久久久久高潮| 一区二区三区四区国产| 亚洲欧洲日韩综合二区| 欧美日产国产成人免费图片| 亚洲肉体裸体xxxx137| 欧美国产日产韩国视频| 免费中文字幕日韩欧美| 亚洲精品视频在线| 亚洲国产精品久久久久秋霞蜜臀| 在线观看欧美日本| 蜜桃视频一区| 欧美成人第一页| 日韩午夜在线电影| 亚洲精品日韩在线| 欧美性猛交视频| 亚久久调教视频| 欧美一区二区三区在线看| 国产一区二区三区自拍| 久热精品视频在线观看| 免费观看一区| 一区二区三区国产在线| 亚洲一区综合| 国产在线精品二区| 欧美99在线视频观看| 欧美国产激情| 亚洲男女毛片无遮挡| 欧美在线国产精品| 亚洲人www| 亚洲午夜一区二区三区| 狠狠色狠狠色综合日日小说| 亚洲国产婷婷综合在线精品| 国产精品久久二区| 老鸭窝亚洲一区二区三区| 欧美伦理视频网站| 久久国产精品99精品国产| 欧美高清你懂得| 久久久999| 欧美午夜影院| 亚洲国产精品va在线观看黑人| 国产精品嫩草影院一区二区| 亚洲第一搞黄网站| 国产伦精品一区二区| 亚洲黄色毛片| 黄色精品一区| 亚洲综合清纯丝袜自拍| 一本久道久久综合中文字幕| 久久精品国产一区二区电影 | 国产伦精品一区二区三区四区免费| 美日韩精品免费观看视频| 欧美视频二区| 亚洲人成精品久久久久| 国产亚洲美州欧州综合国| 亚洲精品免费在线| 亚洲电影视频在线| 久久精品二区三区| 欧美怡红院视频一区二区三区| 欧美激情综合网| 欧美成人网在线| 韩国福利一区| 亚洲尤物在线视频观看| 最新日韩av| 久久乐国产精品| 欧美在线免费| 一道本一区二区| 亚洲高清在线播放| 亚洲国产精品黑人久久久| 国产精品午夜av在线| 欧美在线免费观看| 欧美视频网站| 欧美激情日韩| 欧美sm重口味系列视频在线观看| 99国产精品久久久久久久成人热| 国产精品免费一区二区三区观看 | 中文在线资源观看网站视频免费不卡 | 久久精品国产免费| 午夜激情综合网| 欧美精品成人91久久久久久久| 免费观看久久久4p| 国产色产综合产在线视频| 亚洲理伦在线| 亚洲大胆在线| 久久精品99国产精品酒店日本| 久久激情综合| 国产精品国产三级国产普通话三级 | 中文在线资源观看网站视频免费不卡 | 欧美美女视频| 欧美成人黑人xx视频免费观看| 国产色综合网| 亚洲网在线观看| 艳妇臀荡乳欲伦亚洲一区| 裸体素人女欧美日韩| 久久最新视频| 在线日韩欧美| 欧美成人免费播放| 中文欧美字幕免费| 亚洲一区二区三区高清不卡| 欧美日韩精品免费| 日韩视频免费观看| 亚洲视频精品| 国语自产精品视频在线看| 欧美一区二区三区四区在线| 香蕉久久一区二区不卡无毒影院| 欧美日韩一区在线观看| 在线视频一区观看| 久久综合给合久久狠狠色| 黄色成人91| 欧美+亚洲+精品+三区| 欧美电影专区| 一本色道久久综合亚洲精品婷婷 | 亚洲成人在线免费| 久久性色av| 欧美电影在线| 日韩午夜av| 欧美日韩亚洲一区二区三区| 久久se精品一区二区| 欧美不卡在线视频| 99国产精品国产精品久久| 欧美亚洲成人免费| 亚洲视频一起| 亚洲国产老妈| 亚洲免费在线观看视频| 国产麻豆午夜三级精品| 久久成人免费网| 亚洲精品免费一二三区| 国内外成人免费激情在线视频| 久久一区视频| 欧美激情导航| 一区二区高清视频在线观看| 久久中文久久字幕| 亚洲毛片在线看| 国产乱码精品1区2区3区| 久热re这里精品视频在线6| 久久久久久欧美| 午夜在线a亚洲v天堂网2018| 伊人一区二区三区久久精品| 欧美精品成人91久久久久久久| 亚洲免费在线视频一区 二区| 亚洲国产成人av好男人在线观看|