溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何讀寫XML文件

發(fā)布時間:2021-09-17 13:52:58 來源:億速云 閱讀:147 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“如何讀寫XML文件”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何讀寫XML文件”這篇文章吧。



       這里我們先介紹操作XML文件的兩個對象:XmlTextReader和XmlTextWriter
       打開和讀取Xml文件使用到的對象就是XmlTextReader對象。下面的例子打開了與程序在同一路徑下的一個例子文件sample.xml

XmlTextReader reader = new XmlTextReader("sample.xml");

然后我們可以通過其Read方法實現(xiàn)自動便利XML文件。例:

while(reader.Read())
{
       //在這里填寫對于XML的操作代碼
}

下面我們看一個復(fù)雜一些的例子。

while(reader.Read())
 2{
 3    switch(reader.NodeType)
 4    {
 5        case XmlNodeType.Element:   //當(dāng)前節(jié)點是一個元素
 6              Console.Write("<" + reader.Name);
 7            while(reader.MoveToNextAttribute()) //按照順序讀取下一個屬性
 8              Console.Write(" " + reader.Name + "='" + reader.Value + "'");
 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行開始我們就根據(jù)NodeType屬性去判斷節(jié)點的類型,根據(jù)節(jié)點的不同類型進行不同的處理。

下表列出了一些常用的節(jié)點類型。

XmlTextReader的NodeType的取值

類型

說明

All

所有節(jié)點

Attribute

一個屬性

CDATA

轉(zhuǎn)義那些會被看作標(biāo)記語言(如HTML)的文本

Comment

使用<!—和-->分隔的注釋

Document

XML數(shù)據(jù)樹的根節(jié)點

DocumentType

文檔的類型聲明,即<!DOCTYPE…>標(biāo)記

Element

一個元素,通常是XML文件中的實際數(shù)據(jù)

EndTag

元素的結(jié)束位置

None

不是節(jié)點

Text

返回元素的文本內(nèi)容

XMLDeclaration

XML聲明節(jié)點,例如<?xml version=’

在進行寫入XML文件時我們使用的XmlTextWriter類,它是XmlWriter的子類,速度快且不使用緩存,但是同XmlTextReader一樣,在寫入XML文件時只能向前。

我們假定要寫入的XML文件在C盤根目錄下:

XmlTextWriter writer = new XmlTextWriter("C:\\sample2.xml",null);

在這里如果不想把數(shù)據(jù)寫入文件,而只是想在命令窗口顯示,則可以把“Console.Out”作為參數(shù)傳遞給構(gòu)造器,此時應(yīng)把上述語句改為:

XmlTextWriter writer = new XmlTextWriter(Console.Out);

下面我們介紹一下寫入XML文件數(shù)據(jù)的一些常用方法:

XmlTextWriter的常用方法

方法

說明

用法

WriteStartDocument

寫XML聲明部分,即“<?xml version=”?>”

writer.WriteStartDocument();

WriteEndDocument

使沒有閉合元素閉合

writer.WriteEndDocument();

WriteDocType

寫DOCTYPE聲明

writer.WriteDocType("sample2",null,null,"<!ENTITY h 'hardcover'>");

WriteStartElement

寫元素的開始標(biāo)志

writer.WriteStartElement("sample2");

WriteEndElement

寫元素的結(jié)束標(biāo)志

writer.WriteEndElement();

WriteString

寫入字符串

writer.WriteString("Pride And Prejudice");

WriteCData

寫CDATA塊,即寫入的文字在<![CDATA[…]]>間

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

WriteRaw

手工寫入一行,不作任何處理

writer.WriteRaw("this & that");

WriteEntityRef

寫入實體引用,即前面加“&”后面加“;”

writer.WriteEntityRef("h");

WriteProcessingInstruction

寫入處理指令,即前面加“<?”后面加“?>”

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

WriteComment

寫入注釋,自動加入注釋標(biāo)志“<!--”和“à”

writer.WriteComment("sample XML");

Flush

把緩存中的內(nèi)容寫入文件

writer.Flush();

Close

關(guān)閉,如有未閉合的元素,自動閉合

writer.Close();

其中WriteString方法會對字符串進行下述處理:

1.字符“&”、“<”和“>”轉(zhuǎn)化為“&amp;”、“&lt;”和“&gt;”。

2.ASCII碼為0~(十六進制)的字符轉(zhuǎn)化為“&#~“&#”。

3.如果是在寫屬性的值則雙引號“””轉(zhuǎn)化為“&quot;”;單引號 “’”轉(zhuǎn)化為“&apos;”。

下面給大家寫出一個例程,由于注釋比較詳細就不作過多解釋了。

using System;
 2using System.IO;
 3using System.Xml;
 4
 5public class Sample
 6{
 7    private const string filename = "sampledata.xml";
 8
 9    public static void Main()
10    {
11        XmlTextWriter writer = null;
12
13        writer = new XmlTextWriter (filename, null);
14        //為使文件易讀,使用縮進
15        writer.Formatting = Formatting.Indented;
16
17        //寫XML聲明
18        writer.WriteStartDocument();
19
20        //引用樣式
21        String PItext="type='text/xsl' href='book.xsl'";
22        writer.WriteProcessingInstruction("xml-stylesheet", PItext);
23
24        //Write the DocumentType node
25        writer.WriteDocType("book", null , null, "<!ENTITY h 'hardcover'>");
26        
27        //寫入注釋
28        writer.WriteComment("sample XML");
29    
30        //寫一個元素(根元素)
31        writer.WriteStartElement("book");
32
33        // genre 屬性
34        writer.WriteAttributeString("genre", "novel");
35    
36        // ISBN 屬性
37        writer.WriteAttributeString("ISBN", "1-8630-014");
38
39        //書名元素
40        writer.WriteElementString("title", "The Handmaid's Tale");
41              
42        //Write the style element
43        writer.WriteStartElement("style");
44        writer.WriteEntityRef("h");
45        writer.WriteEndElement(); 
46
47        //價格元素
48        writer.WriteElementString("price", "19.95");
49
50        //寫入 CDATA
51        writer.WriteCData("Prices 15% off!!");
52
53        //關(guān)閉根元素
54        writer.WriteEndElement();
55             
56        writer.WriteEndDocument();
57
58        //緩沖器內(nèi)的內(nèi)容寫入文件
59        writer.Flush();
60        writer.Close();  
61
62        
63        XmlDocument doc = new XmlDocument();
64        
65        doc.PreserveWhitespace = true;
66        //加載文件
67        doc.Load(filename);  
68    
69        //XML文件的內(nèi)容顯示在控制臺
70        Console.Write(doc.InnerXml);  
71        //等待用戶閱讀
72        Console.In.Read();
73    }
74}

以上是“如何讀寫XML文件”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

xml
AI