欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中XmlTextWriter讀寫xml文件詳細介紹

 更新時間:2013年04月02日 10:27:53   作者:  
.NET中包含了很多支持XML的類,這些類使得程序員使用XML編程就如同理解XML文件一樣簡單。在這篇文章中,我將給出這樣的一個類的使用示例,這個類就是XmlTextWriter類

XmlTextWriter類允許你將XML寫到一個文件中去。這個類包含了很多方法和屬性,使用這些屬性和方法可以使你更容易地處理XML。為了使用這個類,你必須首先創(chuàng)建一個新的XmlTextWriter對象,然后你可以將XML片斷加入到這個對象中。這個類中包含了不少的方法用于將各種類型的XML元素添加到XML文件中,下表給出了這些方法的名字和描述情況:

方法
 描述

WriteStartDocument
 書寫版本為“1.0”的 XML 聲明

WriteEndDocument
 關閉任何打開的元素或屬性

Close
 關閉流

WriteDocType
 寫出具有指定名稱和可選屬性的 DOCTYPE 聲明

WriteStartElement
 寫出指定的開始標記

WriteEndElement
 關閉一個元素

WriteFullEndElement
 關閉一個元素,并且總是寫入完整的結束標記

WriteElementString
 寫出包含字符串值的元素

WriteStartAttribute
 書寫屬性的起始內容

WriteEndAttribute
 關閉上一個 WriteStartAttribute 調用

WriteRaw
 手動書寫原始標記

WriteString
 書寫一個字符串

WriteAttributeString
 出具有指定值的屬性

WriteCData
 寫出包含指定文本的 <![CDATA[...]]> 塊

WriteComment
 寫出包含指定文本的注釋 <!--...-->

WriteWhiteSpace
 寫出給定的空白

WriteProcessingInstruction
 寫出在名稱和文本之間帶有空格的處理指令,如下所示:<?name text?>

如果你對于XML十分熟悉,那么你一定能很好的理解上面的這些方法。下面我們將給出一個例子,在這個例子中,我們將先創(chuàng)建一個文檔,添加一些元素,然后關閉這個文檔。添加了元素后你還可以添加子元素,屬性和其他內容。下面的代碼就是這樣的一個例子,它創(chuàng)建了一個文件名為title的XML文件。


復制代碼 代碼如下:

using System;
using System.IO;
using System.Xml;
public class Sample
{
  public static void Main()
  {
     XmlTextWriter writer = new XmlTextWriter("titles.xml", null);
     //寫入根元素
     writer.WriteStartElement("items");
     //加入子元素
     writer.WriteElementString("title", "Unreal Tournament 2003");
     writer.WriteElementString("title", "C&C: Renegade");
     writer.WriteElementString("title", "Dr. Seuss's ABC");
     //關閉根元素,并書寫結束標簽
     writer.WriteEndElement();
     //將XML寫入文件并且關閉XmlTextWriter
     writer.Close(); 
  }
}

如果你編譯并且執(zhí)行上面的代碼,你將創(chuàng)建這個XML文件,文件中包含如下內容:

復制代碼 代碼如下:

<items>
    <title>Unreal Tournament 2003</title>
    <title>C&amp;C: Renegade</title>
    <title>Dr. Seuss's ABC</title>
</items>

上面的代碼創(chuàng)建了一個名為writer的XmlTextWriter對象。當這個對象被創(chuàng)建時,它被關聯(lián)到一個名為titles.xml的文件。接著,程序創(chuàng)建了一個叫做items的根屬性,WriteStartElement方法創(chuàng)建了這個屬性的開始標簽。接下來,程序調用了WriteElementString方法創(chuàng)建了三個子元素。從上面的代碼你還可以看到,這個方法使用第一個參數(shù)(在上面的程序中是title)作為元素的標簽;使用第二個參數(shù)作為元素的值。當你添加了所有的元素后,你需要關閉根元素。這時你可以調用WriteEndElement方法關閉那個最近被打開的元素;在本例中,這個最近被打開的元素就是根元素。當所有的數(shù)據(jù)都已經(jīng)寫好,根元素也已經(jīng)關閉時,你可以將信息傳送給你的XmlTextWriter。這意味著這時候你可以調用Close方法關閉它了。

上面的代碼相對十分的簡單,下面我們看一個使用了XmlTextWriter類中更多方法,功能更加完善的例子。

復制代碼 代碼如下:

using System;
using System.IO;
using System.Xml;
public class Sample
{
  public static void Main()
  {
     XmlTextWriter writer = new XmlTextWriter("myMedia.xml", null);
     //使用自動縮進便于閱讀
     writer.Formatting = Formatting.Indented;
     //書寫根元素
     writer.WriteStartElement("items");
     //開始一個元素
     writer.WriteStartElement("item");
     //向先前創(chuàng)建的元素中添加一個屬性
     writer.WriteAttributeString("rating", "R");
     //添加子元素
     writer.WriteElementString("title", "The Matrix");
     writer.WriteElementString("format", "DVD");
     //關閉item元素
     writer.WriteEndElement();  // 關閉元素
     //在節(jié)點間添加一些空格
     writer.WriteWhitespace("\n");
     //使用原始字符串書寫第二個元素
     writer.WriteRaw("<item>" +
                     "<title>BloodWake</title>" +
                     "<format>XBox</format>" +
                     "</item>");
     //使用格式化的字符串書寫第三個元素
     writer.WriteRaw("\n  <item>\n" +
                     "    <title>Unreal Tournament 2003</title>\n" +
                     "    <format>CD</format>\n" +
                     "  </item>\n");
     // 關閉根元素
     writer.WriteFullEndElement();
     //將XML寫入文件并關閉writer
     writer.Close();
  }
}

上面代碼編譯運行后將得到myMedia.xml文件,文件的內容為:

復制代碼 代碼如下:

 <items>
  <item rating="R">
    <title>The Matrix</title>
    <format>DVD</format>
  </item>
<item>
    <title>BloodWake</title>
    <format>XBox</format>
</item>
  <item>
    <title>Unreal Tournament 2003</title>
    <format>CD</format>
  </item>
</items>

上面代碼中的注釋說明了這個程序的功能是如何實現(xiàn)的。需要記住的一件事是:當調用方法開始一個操作時,你需要在程序的合適的地方調用方法結束這個操作。例如,你調用了StartElement,你就必須調用EndElement關閉元素;當然在這兩個調用之間你也可以加入一個子元素。無論你何時調用EndElement方法,它總是關閉最近使用StartElement方法打開的那個元素(這和棧的工作方式很相似)。

使用XmlTextWriter十分的容易,不過我還是建議你自己動手試試這些代碼和方法。你試過以后會發(fā)現(xiàn)這些代碼能夠很容易地集成到你的程序中。你還應該記住,XmlTextWriter僅僅是.NET提供的眾多XML類中的一個。和XmlTextWriter一樣,其他的XML類也十分的容易使用

 


2)
我用的是一種很笨的方法,但可以幫助初學者了解訪問XML節(jié)點的過程。

已知有一個XML文件(bookstore.xml)如下:

復制代碼 代碼如下:

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
</bookstore>

1、往<bookstore>節(jié)點中插入一個<book>節(jié)點:

復制代碼 代碼如下:

   XmlDocument xmlDoc=new XmlDocument();
   xmlDoc.Load("bookstore.xml");
   XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>
   XmlElement xe1=xmlDoc.CreateElement("book");//創(chuàng)建一個<book>節(jié)點
   xe1.SetAttribute("genre","李贊紅");//設置該節(jié)點genre屬性
   xe1.SetAttribute("ISBN","2-3631-4");//設置該節(jié)點ISBN屬性

   XmlElement xesub1=xmlDoc.CreateElement("title");
   xesub1.InnerText="CS從入門到精通";//設置文本節(jié)點
   xe1.AppendChild(xesub1);//添加到<book>節(jié)點中
   XmlElement xesub2=xmlDoc.CreateElement("author");
   xesub2.InnerText="候捷";
   xe1.AppendChild(xesub2);
   XmlElement xesub3=xmlDoc.CreateElement("price");
   xesub3.InnerText="58.3";
   xe1.AppendChild(xesub3);

   root.AppendChild(xe1);//添加到<bookstore>節(jié)點中
   xmlDoc.Save("bookstore.xml");

結果為:

復制代碼 代碼如下:

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
  <book genre="李贊紅" ISBN="2-3631-4">
    <title>CS從入門到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </book>
</bookstore>

2、修改節(jié)點:將genre屬性值為“李贊紅“的節(jié)點的genre值改為“update李贊紅”,將該節(jié)點的子節(jié)點<author>的文本修改為“亞勝”。

復制代碼 代碼如下:

   XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//獲取bookstore節(jié)點的所有子節(jié)點
   foreach(XmlNode xn in nodeList)//遍歷所有子節(jié)點
   {
    XmlElement xe=(XmlElement)xn;//將子節(jié)點類型轉換為XmlElement類型
    if(xe.GetAttribute("genre")=="李贊紅")//如果genre屬性值為“李贊紅”
    {
     xe.SetAttribute("genre","update李贊紅");//則修改該屬性為“update李贊紅”

     XmlNodeList nls=xe.ChildNodes;//繼續(xù)獲取xe子節(jié)點的所有子節(jié)點
     foreach(XmlNode xn1 in nls)//遍歷
     {
      XmlElement xe2=(XmlElement)xn1;//轉換類型
      if(xe2.Name=="author")//如果找到
      {
       xe2.InnerText="亞勝";//則修改
       break;//找到退出來就可以了
      }
     }
     break;
    }
   }

   xmlDoc.Save("bookstore.xml");//保存。

最后結果為:

復制代碼 代碼如下:

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
  <book genre="update李贊紅" ISBN="2-3631-4">
    <title>CS從入門到精通</title>
    <author>亞勝</author>
    <price>58.3</price>
  </book>
</bookstore>

3、刪除 <book genre="fantasy" ISBN="2-3631-4">節(jié)點的genre屬性,刪除 <book genre="update李贊紅" ISBN="2-3631-4">節(jié)點。

復制代碼 代碼如下:

XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;

   foreach(XmlNode xn in xnl)
   {
    XmlElement xe=(XmlElement)xn;
    if(xe.GetAttribute("genre")=="fantasy")
    {
     xe.RemoveAttribute("genre");//刪除genre屬性
    }
    else if(xe.GetAttribute("genre")=="update李贊紅")
    {
     xe.RemoveAll();//刪除該節(jié)點的全部內容
    }
   }
   xmlDoc.Save("bookstore.xml");

最后結果為:

復制代碼 代碼如下:

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
  <book>
  </book>
</bookstore>

4、顯示所有數(shù)據(jù)。

復制代碼 代碼如下:

 XmlNode xn=xmlDoc.SelectSingleNode("bookstore");

   XmlNodeList xnl=xn.ChildNodes;

   foreach(XmlNode xnf in xnl)
   {
    XmlElement xe=(XmlElement)xnf;
    Console.WriteLine(xe.GetAttribute("genre"));//顯示屬性值
    Console.WriteLine(xe.GetAttribute("ISBN"));

    XmlNodeList xnf1=xe.ChildNodes;
    foreach(XmlNode xn2 in xnf1)
    {
     Console.WriteLine(xn2.InnerText);//顯示子節(jié)點點文本
    }
   }

相關文章

  • Windows系統(tǒng)中使用C#編寫藍牙通信程序的簡單實例

    Windows系統(tǒng)中使用C#編寫藍牙通信程序的簡單實例

    這篇文章主要介紹了Windows系統(tǒng)中使用C#編寫藍牙通信程序的簡單實例,文中的例子使用到了32feet.NET中的InTheHand.Net.Personal類庫,需要的朋友可以參考下
    2016-04-04
  • C#實現(xiàn)的簡單鏈表類實例

    C#實現(xiàn)的簡單鏈表類實例

    這篇文章主要介紹了C#實現(xiàn)的簡單鏈表類,涉及C#針對鏈表的定義、實現(xiàn)及鏈表節(jié)點的增加、刪除與修改技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#微信公眾平臺開發(fā)之a(chǎn)ccess_token的獲取存儲與更新

    C#微信公眾平臺開發(fā)之a(chǎn)ccess_token的獲取存儲與更新

    這篇文章主要介紹了C#微信公眾平臺開發(fā)之a(chǎn)ccess_token的獲取存儲與更新的相關資料,需要的朋友可以參考下
    2016-03-03
  • C# 郵箱mail 發(fā)送類

    C# 郵箱mail 發(fā)送類

    此類的功能包括發(fā)送郵件,郵箱格式是否正確,和在不發(fā)送郵件的情況下判斷郵箱用戶名和密碼是否正確,鑒于POP檢查郵箱用戶名和密碼出現(xiàn)錯誤情況返回結果的延遲,用異步線程解決此問題,見代碼
    2015-06-06
  • 如何在C#9 中使用頂級程序 (top-level)

    如何在C#9 中使用頂級程序 (top-level)

    這篇文章主要介紹了如何在C#9 中使用頂級程序 (top-level),幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C# 基礎入門--關鍵字

    C# 基礎入門--關鍵字

    本文主要介紹了C# 基礎知識--關鍵字的相關知識,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • C#中除去所有在HTML元素中標記

    C#中除去所有在HTML元素中標記

    C#中除去所有在HTML元素中標記...
    2007-03-03
  • C#構造函數(shù)詳解

    C#構造函數(shù)詳解

    本文詳細講解了C#中的構造函數(shù),文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#實現(xiàn)終止正在執(zhí)行的線程

    C#實現(xiàn)終止正在執(zhí)行的線程

    這篇文章主要介紹了C#實現(xiàn)終止正在執(zhí)行的線程的方法,針對臨界資源等容易出現(xiàn)錯誤的地方進行了分析,并提出了改進方案與實例,需要的朋友可以參考下
    2014-09-09
  • C#中ListView用法實例

    C#中ListView用法實例

    我們經(jīng)常會在應用程序中使用列表的形式來展現(xiàn)一些內容,所以學好ListView是非常必需的,下面這篇文章主要給大家介紹了關于C#中ListView用法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06

最新評論