您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何讀寫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)化為“&”、“<”和“>”。
2.ASCII碼為0~(十六進制)的字符轉(zhuǎn)化為“&#~“&#”。
3.如果是在寫屬性的值則雙引號“””轉(zhuǎn)化為“"”;單引號 “’”轉(zhuǎn)化為“'”。
下面給大家寫出一個例程,由于注釋比較詳細就不作過多解釋了。
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è)資訊頻道!
免責(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)容。