詳解讀寫XML檔的程式碼案例

黄舟
發布: 2017-03-23 16:41:56
原創
2114 人瀏覽過

        本文將會涉及3個面向的內容:
        1.存取XML檔案
        2. XML文檔物件模式
        3. XML和DataSet

        這裡我們先介紹操作XML檔案的兩個物件:XmlTextReader和XmlTextWriter
        開啟和讀取XmlTextReader和XmlTextWriter

        開啟和讀取Xml》所使用到的物件就是XmlTextReader。下面的範例開啟了與程式在相同路徑下的一個範例檔案sample.xml

XmlTextReader reader = new XmlTextReader("sample.xml");
登入後複製

        接著我們可以透過其Read方法實作自動便利XML檔。例:

while(reader.Read())
{
       //在这里填写对于XML的操作代码
}
登入後複製

        下面我們來看一個複雜的範例。

while(reader.Read())
 2{
 3    switch(reader.NodeType)
 4    {
 5        case XmlNodeType.Element:   //当前节点是一个元素
 6              Console.Write("<" + reader.Name);
 7            while(reader.MoveToNextAttribute()) //按照顺序读取下一个属性
 8              Console.Write(" " + reader.Name + "=&#39;" + reader.Value + "&#39;");
 9            Console.Write(">");
10            break;
11        case XmlNodeType.DocumentType:  //XML文件的类型声明
12              Console.WriteLine(reader.NodeType + "<" + reader.Name + ">" + reader.Value);
13            break;
14        ……
15        }
16    }
登入後複製

        從第3行開始我們就依照NodeType屬性去判斷節點的型別,依照節點的不同型別進行不同的處理。

        下表則列出了一些常用的節點類型。 ##DocumentTypeElement#EndTagNoneTextXMLDeclaration

XmlTextReader#的NodeType#的取值

##類型

#說明

All

所有節點

#Attribute

##一個屬性

CDATA

#轉義那些會被看成標記語言(如HTML)的文字

Comment

使用分隔的

註解

Document

XML資料樹的根節點

##XML資料樹的根節點

文件的類型聲明,即標記

一個元素,通常是XML檔案中的實際資料

元素的結束位置

不是節點

傳回元素的文字內容

###XML宣告節點,例如 在进行写入XML文件时我们使用的XmlTextWriter类,它是XmlWriter的子类,速度快且不使用缓存,但是同XmlTextReader一样,在写入XML文件时只能向前。

我们假定要写入的XML文件在C盘根目录下:

XmlTextWriter writer = new XmlTextWriter("C:\\sample2.xml",null);
登入後複製

在这里如果不想把数据写入文件,而只是想在命令窗口显示,则可以把“Console.Out”作为参数传递给构造器,此时应把上述语句改为:

XmlTextWriter writer = new XmlTextWriter(Console.Out);
登入後複製

下面我们介绍一下写入XML文件数据的一些常用方法:

XmlTextWriter的常用方法

方法

说明

用法

WriteStartDocument

写XML声明部分,即“

writer.WriteStartDocument();

WriteEndDocument

使没有闭合元素闭合

writer.WriteEndDocument();

WriteDocType

写DOCTYPE声明

writer.WriteDocType("sample2",null,null,"");

WriteStartElement

写元素的开始标志

writer.WriteStartElement("sample2");

WriteEndElement

写元素的结束标志

writer.WriteEndElement();

WriteString

写入字符串

writer.WriteString("Pride And Prejudice");

WriteCData

写CDATA块,即写入的文字在

writer.WriteCData("Price 15% off!!");

WriteRaw

手工写入一行,不作任何处理

writer.WriteRaw("this & that");

WriteEntityRef

写入实体引用,即前面加“&”后面加“;”

writer.WriteEntityRef("h");

WriteProcessingInstruction

写入处理指令,即前面加“

writer.WriteProcessingInstruction("xml-stylesheet",PItext);

WriteComment

写入注释,自动加入注释标志“