原本想基於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 >
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屬性工作表示封閉字元,預設為雙引號