System.Xml.XmlTextWriter 類別
本文提供此 API 參考文件的補充備註。
類別 XmlTextWriter 會實作 XmlWriter 類別。
注意
建議您使用 XmlWriter.Create 方法和 XmlWriterSettings 類別來建立XmlWriter實例,以利用新功能。
XmlTextWriter
會維護對應至目前項目堆疊中定義之所有命名空間的命名空間堆疊。 您可以使用 XmlTextWriter
手動宣告命名空間。
w.WriteStartElement("root");
w.WriteAttributeString("xmlns", "x", null, "urn:1");
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
上述 C# 程式代碼會產生下列輸出。 XmlTextWriter
將命名空間宣告提升為根元素,以避免在兩個子元素上重複它。 子專案會從命名空間宣告中挑選前置詞。
<root xmlns:x="urn:1">
<x:item/>
<x:item/>
</x:root>
XmlTextWriter
也可讓您覆寫目前的命名空間宣告。 在下列範例中,命名空間 URI “123” 會由 “abc” 覆寫,以產生 XML 元素 <x:node xmlns:x="abc"/>
。
w.WriteStartElement("x","node","123");
w.WriteAttributeString("xmlns","x",null,"abc");
藉由使用採用前置詞做為自變數的寫入方法,您也可以指定要使用的前置詞。 在下列範例中,兩個不同的前置詞會對應至相同的命名空間 URI,以產生 XML 文字 <x:root xmlns:x="urn:1"><y:item xmlns:y="urn:1"/></x:root>
。
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
如果有多個命名空間宣告會將不同的前置詞對應至相同的命名空間 URI, XmlTextWriter
請往後走命名空間宣告堆棧,並挑選最接近的命名空間宣告堆疊。
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.Formatting = Formatting.Indented;
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteAttributeString("attr","urn:1","123");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
在上述 C# 範例中 WriteAttributeString
,由於呼叫未指定前置詞,因此寫入器會使用推送至命名空間堆疊的最後一個前置詞,併產生下列 XML:
<x:root xmlns:x="urn:1">
<y:item y:attr="123" xmlns:y="urn:1" />
</x:root>
如果發生命名空間衝突, XmlTextWriter
請藉由產生替代前置詞來解決它們。 例如,如果屬性和元素具有相同的前置詞,但命名空間不同, XmlWriter
則會產生屬性的替代前置詞。 產生的前置詞會命名 n{i}
為 ,其中 i
是從 1 開始的數位。 每個元素的數位會重設為1。
與命名空間 URI 相關聯的屬性必須具有前置詞(預設命名空間不適用於屬性)。 這符合 XML 建議中 W3C 命名空間的第 5.2 節。 如果屬性參考命名空間 URI,但未指定前置詞,寫入器會產生屬性的前置詞。
寫入空白專案時,標記名稱和結尾標記之間會新增額外的空格,例如 <item />
。 這可提供與舊版瀏覽器的相容性。
String
當 做方法參數使用 時,null
且 String.Empty
相等。 String.Empty
遵循 W3C 規則。
若要寫入強型別數據,請使用 XmlConvert 類別將數據類型轉換成字串。 例如,下列 C# 程式代碼會將資料從 Double
String
轉換成 ,並寫入專案 <price>19.95</price>
。
Double price = 19.95;
writer.WriteElementString("price", XmlConvert.ToString(price));
XmlTextWriter
不會檢查下列專案:
- 屬性和項目名稱中的字元無效。
- 不符合指定編碼的 Unicode 字元。 如果 Unicode 字元不符合指定的編碼,
XmlTextWriter
則 不會將 Unicode 字元逸出至字元實體。 - 重複的屬性。
- DOCTYPE 公用標識碼或系統識別碼中的字元。
安全性考量
下列專案是使用 XmlTextWriter 類別時要考慮的專案。
所 XmlTextWriter 擲回的例外狀況可以揭露您不想泡到應用程式的路徑資訊。 應用程式必須捕捉例外狀況並予以適當處理。
將 XmlTextWriter 傳遞到其他應用程式時,基礎資料流會對該應用程式公開。 如果您需要將 XmlTextWriter 傳遞到非完全信任的應用程式,則應改用 XmlWriter 方法所建立的 Create 物件。
XmlTextWriter不會驗證傳遞至 WriteDocType 或 WriteRaw 方法的任何數據。 您不應該將任意數據傳遞至這些方法。
如果預設設定已變更,則不保證產生的輸出是格式正確的 XML 數據。
不接受來自不受信任來源的支援元件,例如 Encoding 物件。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應