共用方式為


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當 做方法參數使用 時,nullString.Empty 相等。 String.Empty 遵循 W3C 規則。

若要寫入強型別數據,請使用 XmlConvert 類別將數據類型轉換成字串。 例如,下列 C# 程式代碼會將資料從 DoubleString 轉換成 ,並寫入專案 <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不會驗證傳遞至 WriteDocTypeWriteRaw 方法的任何數據。 您不應該將任意數據傳遞至這些方法。

  • 如果預設設定已變更,則不保證產生的輸出是格式正確的 XML 數據。

  • 不接受來自不受信任來源的支援元件,例如 Encoding 物件。