熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

在Visual C#中使用XML之編寫XML

2022-06-13   來源: ASP編程 
在我的上一篇文章《C#中使用XML——讀取XML target=_blank>C#中使用XML——讀取XML 》中和大家討論了如何使用NET Framework中提供的類在C#中讀取XML以及讀取的一些相關概念那麼今天就說一說如何在C#中編寫XML文檔起初我覺得用編程的方式去編寫XML簡直就是自討苦吃後來想想還是覺得挺有用的我想Microsoft那班家伙能編出這些類來應該不是僅僅為了向比爾i蓋茨交差吧!至於它的用處嘛……比如說做安裝程序啊!我們可以根據在安裝過程中用戶所選的選項以及一些設置來生成相應的XML文檔再根據XML文檔來初始化我們的應用程序空洞的話不說那麼多了下面我們來了解一下具體的實現細節

  要編寫XML同樣是采用流的概念NET中編寫XML的細節是作為XmlWriter類來實現的但該類是抽象類不能夠實例化為此我們要想在程序中訪問它的方法以實現編寫XML的願望必需使用它的派生類XmlTextWriter該類提供了一系列的屬性和方法為我們編寫XML做准備下面將詳細的介紹這個類

  構造函數

cellPadding= border=> public XmlTextWriter(TextWriter);
public XmlTextWriter(Stream Encoding);
public XmlTextWriter(string Encoding);
  第一個構造函數是把現有的TextWriter實例傳遞過去SystemIOTextWriter類是一個有序的字符流

  第二個構造函數是把要寫入的流作為第一個參數第二個參數是指定XML文檔的編碼方式默認是UTF可取Encoding的枚舉值流可以是FileStreamMemoryStreamNetworkStream等等

  第三個構造函數是把希望寫入的文件名當作一個字符串(如果存在就重寫該文件)傳遞給第一個參數第二個參數指定編碼方式

  常用的方法

  WriterStartDocument()和WriterEndDocument()方法

  第一個方法用來編寫XML聲明部分<?xml version= encoding=UTF ?>

  第二個方法用來關閉任何打開的元素或屬性並將編寫器重新設置為 Start 狀態

  WriterStartElement()和WriteEndElement()方法

  第一個方法用來寫出指定的開始標記該方法有以下幾個重載

cellPadding= border=> WriterStartElement(string localname)
  使用傳遞的字符串作為元素的本地名稱

cellPadding= border=> WriterStartElement(string localnamestring namespace)
  第一個參數指定元素的本地名稱第二個參數指定元素所在的命名空間

cellPadding= border=> WriterStartElement(string prefixstring localnamestring namespace)

  第一個參數指定元素的前綴第二個參數指定元素的本地名稱第三個參數指定元素所在的命名空間

  第二個方法用來寫出與開始元素對應的關閉元素如果開始元素不包含任何內容將用一個/>做為關閉元素

  WriterStartAttribute()和WriterEndAttribute()方法

  第一個方法用於編寫一個屬性的開頭該方法有兩個重載

cellPadding= border=> WriterStartAttribute(string localnamestring namespace)
  第一個參數指定屬性的本地名稱第二個參數指定屬性所在的命名空間

cellPadding= border=> WriterStartAttribute(string prefixstring localnamestring namespace)
  第一個參數指定屬性的前綴第二個參數指定屬性的本地名稱第三個參數指定屬性所在的命名空間

  第二個方法用於關閉WriterStartAttribute創建的屬性

  WriterElementString()方法

  該方法可以創建一個包含字符串值的元素它有以下重載

cellPadding= border=> WriterElementString(string localnamestring value)
  如果編寫這樣的代碼WriterElementString(paraSome text) 將輸出<para>Some text</para>

cellPadding= border=> WriterElementString(string localnamestring namespacestring value)
  如果編寫這樣的代碼WriterElementString(paraSome text) 將輸出<para xmlns=>Some text</para>

  如果編寫嵌套幾級的元素可使用WriterStartElement()和WriterEndElement()方法如果編寫直接包含內容的元素可以使用該方法

  WriterAttributeString()方法

  類似與WriterElementString()方法在使用上如果屬性的值當中不包含實體可直接使用該方法來寫出屬性如果屬性值包含實體可使用WriterStartAttribute()和WriterEndAttribute()方法例如要寫出這樣的XML——<para author=Do&;a&LPerez/>可編寫以下代碼

cellPadding= border=> WriterStartElement(para);
WriterStartAttribute(authornull);
WriterString(Do);
WriterCharEntiry(~n);
WriterString(a);
WriterCharEntiry(&);
WriterString(LPerez);
WriterEndAttribute();
WriterEndElement();
  該方法有以下重載

cellPadding= border=> WriterAttributeString(string localnamestring value);
WriterAttributeString(string localnamestring namespacestring value);
WriterAttributeString(string prefx string localnamestring namespacestring value);
  WriterNode(XmlReader readerbool defattr)方法

  該方法可以從XmlReader讀取器中復制節點並把它們寫入XmlWriter流中第一個參數是XmlReader的實例第二個參數接受一個布爾值決定是否復制元素中的屬性考慮下面XML片段

cellPadding= border=> <para>
<sent>
The<b>XmlWriter</b>class writes XML content to a Stream
</sent>
</para>
  以下代碼復制其中的片段reader代表XmlReader的實例writer代表XmlWriter類的實例

cellPadding= border=> while(readerRead())
{
 if (readerName == sent && readerNodeType == XmlNodeTypeElement)
 {
  writerWriterNode(readertrue);
 }
}
  得到以下輸出

cellPadding= border=> <sent>

The<b>XmlWriter</b>class writes XML content to a Stream

</sent>

  WriterComment(string text)方法用於寫出注釋

  WriterString(string text)方法用於寫出文本

  WriterCData(string text)方法寫出CDATA數據塊

  WriterBase(byte[] bufferint indexint count)方法將指定的二進制字節編碼為 Base 並寫出結果文本

  Flush()將緩沖區中的所有內容刷新到基礎流並同時刷新基礎流 Close()關閉此流和基礎流

  以上對XmlTextWriter類的一些重要方法做了簡單介紹下面我們就來看一個例程看看在程序中如何使用這些方法照樣還是先來看下運行效果圖

javascript:if(thiswidth>)thiswidth=; onclick=javascript:windowopen(thissrc); src=_//JPG width= onload=javascript:if(thiswidth>)thiswidth=; align=absMiddle border=>

  Example按紐將向一個文件寫出XML聲明和一個元素節點以及節點內的文本Example按紐將在Example的基礎上添加屬性節點嵌套元素以及文本WriteNode按紐使用WriterNode()方法在現有讀取器中復制該讀取器中的所有元素及屬性並寫到一個新的XML文檔中Example按紐將寫一份完整的XML文檔Example按紐在Example按紐的基礎上另外生成一份文檔並向該文檔中追加CDATA部分Example按紐將使用WriterBase()方法對一幅圖片進行編碼並將編碼後的數據寫到XML文檔中Example按紐將使用Example按紐中生成的XML讀取其中數據並對其中編碼數據進行解碼最後生成一張圖片

  以下是在WriteNode按紐中要使用到的XML文件

  唐詩xml

cellPadding= border=> <?xml version= encoding=gb?>
<唐詩>
 <五言絕句>
  <作者 字號=太白>李白</作者>
  <標題>靜夜思</標題>
  <內容>床前明月光疑是地上霜舉頭望明月低頭思故鄉</內容>
 </五言絕句>
 <五言絕句>
  <作者 字號=太白>李太白</作者>
  <標題>春曉</標題>
  <內容>春眠不覺曉處處聞啼鳥夜來風雨聲花落知多少</內容>
 </五言絕句>
 <五言絕句>
  <作者 字號=季凌>王之渙</作者>
  <標題>登鶴雀樓</標題>
  <內容>白日依山盡黃河入海流欲窮千裡目更上一層樓</內容>
 </五言絕句>
 <五言絕句>
  <作者>李清照</作者>
  <標題>如夢令</標題>
  <內容>昨夜風疏雨驟濃睡不消殘酒試問卷簾人卻道海棠依舊知否知否應是綠肥紅瘦</內容>
 </五言絕句>
</唐詩>


From:http://tw.wingwit.com/Article/program/ASP/201311/21765.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.