XmlTextWriter學習筆記

來源:互聯網
上載者:User
原本想基於XmlDocument自己寫一個Xml編寫器,但卻發覺狀態維護實在麻煩。在閱讀《Applied Xml Programming for Microsoft .Net》時,意外發現XmlTextWriter的優越性,於是決定直接使用它進行開發。

XmlWriter與XmlTextWriter的區別

一開始我認為既然XmlTextWriter可以用,那XmlWriter也一定可以用,當我寫完下面的語句時,編譯器報錯。

XmlWriter doc=new XmlWriter();

原因很簡單,XmlWriter是抽象類別,自然不能直接執行個體化。看了書後才知道XmlTextWriter是XmlWriter介面的實作類別,因此初始化語句改為

XmlWriter doc=new XmlTextWriter();

這樣就對了。

常用函數說明

1. WriteStartDocument()

用於寫Xml頭聲明,即<?xml version="1.0"
encoding="utf-8">,如果使用該函數的重載函數WriteStartDocument(bool
standalone),就可以設定聲明的standalone屬性,該屬性工作表示該xml文檔是否與其他檔案獨立,即是否需要單獨聲明節點。
2. WriteEndDocument()

該函數儘管不會向xml檔案寫任何文本,但必須在編寫結束時調用,以結束寫過程,它會清空XmlTextWriter中維護的所有堆棧和臨時資訊,類似於Dispose()函數。

3. WriteStartElement()

建立當前節點的一個子節點,通常使用WriteStartElement(string LocalName,string Value),其中LocalName表示節點名稱,value表示節點的InnerText

如:WriteStartElement("address","Tian Jing Road");

產生的xml:<address>Tian Jing Road</address>

4. WriteEndElement()

一旦使用過一句WriteStartElement()就必須有對應的WriteEndElement(),當WriteEndElement被執行後,當前指向的節點就會轉為父節點,如:

<shop>

    <address>Tian Jing Road</address>

</shop>

在執行WriteStartElement("address","Tian Jing Road")後,當前指向<address>節點,在WriteEndElement被執行後,當前節點指向<shop>節點

5. WriteStartAttribute()與WriteEndAttribute()

與節點建立函數用法相同

6. WriteAttributeString(string LocalName,string value)

該函數用於建立屬性,與WriteStartAttribute()不同的是它不需要EndAttribute(),直接使用就可以了。

但要注意它與WriteStartAttribute產生的xml的不同之處,看下面的例子:

WriteStartElement("address"); 

WriteStartAttribute("state","California");

WriteEndAttribute();

WriteEndElement();

以上代碼產生的xml:<address d1p1:state="" xmlns:d1p1="California" />

WriteStartElement("address"); 

WriteAttributeString("state","California");

WriteEndElement();

以上代碼產生的xml: <address state="California" />

也就是說WriteAttributeString產生的是未處理的原始語句,而WriteStartAttribute()產生的是Xml Schema語句

7. WriteElementString(string LocalName, string Value)

與WriteAttributeString的用法相同,其中LocalName為節點名稱,Value為節點的InnerText。

8. WriteString()與WriteRaw()的區別

    WriteString("More >")產生的Xml是More &gt

    WriteRaw("More >")產生的xml是More >

    也就是說WriteString會把敏感字元轉換為逸出字元,而WriteRaw()則是直接寫入,不做任何處理
9. WriteCData()
    該函數是用來寫用CData包裹的字串,在字串中有敏感字元時很有用
    WriteCData("More >")產生的Xml是<![CDATA [More >]] >
10.WriteFullEndElement()
    該函數用來寫完整的結束標誌,如<address></address>,
    writer.WriteStartElement("address", null);
    writer.WriteFullEndElement();


 
常用屬性說明

1.Formatting屬性的預設值為Formatting.None

2.XmlTextReader.Indentation屬性,表示縮近字元的字元數,當Formatting屬性為Formatting.Indented時,才會生效

3.XmlTextReader.IndentChar才會生效,IndentChar是縮近字元,一般使用’\t’,當Formatting屬性為Formatting.Indented時,才會生效

4.

QuoteChar屬性工作表示封閉字元,預設為雙引號

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.