Bagikan melalui


Kelas System.Xml.XmlTextWriter

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Kelas mengimplementasikan XmlTextWriterXmlWriter kelas .

Catatan

Kami menyarankan agar Anda membuat XmlWriter instans dengan menggunakan XmlWriter.Create metode dan XmlWriterSettings kelas untuk memanfaatkan fungsionalitas baru.

XmlTextWriter mempertahankan tumpukan namespace yang sesuai dengan semua namespace yang ditentukan dalam tumpukan elemen saat ini. Menggunakan XmlTextWriter Anda dapat mendeklarasikan namespace secara manual.

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();

Kode C# di atas menghasilkan output berikut. XmlTextWriter mempromosikan deklarasi namespace layanan ke elemen akar untuk menghindari duplikatnya pada dua elemen anak. Elemen turunan mengambil awalan dari deklarasi namespace layanan.

<root xmlns:x="urn:1">
<x:item/>
<x:item/>
</x:root>

XmlTextWriter juga memungkinkan Anda untuk mengambil alih deklarasi namespace saat ini. Dalam contoh berikut, namespace URI "123" ditimpa oleh "abc" untuk menghasilkan elemen <x:node xmlns:x="abc"/>XML .

w.WriteStartElement("x","node","123");
w.WriteAttributeString("xmlns","x",null,"abc");

Dengan menggunakan metode tulis yang mengambil awalan sebagai argumen, Anda juga dapat menentukan awalan mana yang akan digunakan. Dalam contoh berikut, dua awalan yang berbeda dipetakan ke URI namespace yang sama untuk menghasilkan teks <x:root xmlns:x="urn:1"><y:item xmlns:y="urn:1"/></x:root>XML .

XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
w.Close();

Jika ada beberapa deklarasi namespace layanan yang memetakan awalan yang berbeda ke URI namespace yang sama, XmlTextWriter berjalan tumpukan deklarasi namespace layanan mundur dan memilih yang terdekat.

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();

Dalam contoh C# di atas, karena WriteAttributeString panggilan tidak menentukan awalan, penulis menggunakan awalan terakhir yang didorong ke tumpukan namespace layanan, dan menghasilkan XML berikut:

<x:root xmlns:x="urn:1">
<y:item y:attr="123" xmlns:y="urn:1" />
</x:root>

Jika terjadi konflik namespace layanan, XmlTextWriter selesaikan dengan menghasilkan awalan alternatif. Misalnya, jika atribut dan elemen memiliki awalan yang sama tetapi namespace layanan yang berbeda, XmlWriter menghasilkan awalan alternatif untuk atribut . Awalan yang dihasilkan diberi nama n{i} di mana i adalah angka yang dimulai pada 1. Angka diatur ulang ke 1 untuk setiap elemen.

Atribut yang terkait dengan URI namespace harus memiliki awalan (namespace default tidak berlaku untuk atribut). Ini sesuai dengan bagian 5.2 dari Namespace W3C dalam rekomendasi XML. Jika atribut mereferensikan URI namespace, tetapi tidak menentukan awalan, penulis menghasilkan awalan untuk atribut .

Saat menulis elemen kosong, spasi tambahan ditambahkan antara nama tag dan tag penutup, misalnya <item />. Ini memberikan kompatibilitas dengan browser yang lebih lama.

String Ketika digunakan sebagai parameter metode, null dan String.Empty setara. String.Empty mengikuti aturan W3C.

Untuk menulis data yang XmlConvert di ketik dengan kuat, gunakan kelas untuk mengonversi jenis data menjadi string. Misalnya, kode C# berikut mengonversi data dari Double ke String dan menulis elemen <price>19.95</price>.

Double price = 19.95;
writer.WriteElementString("price", XmlConvert.ToString(price));

XmlTextWriter tidak memeriksa hal-hal berikut:

  • Karakter tidak valid dalam nama atribut dan elemen.
  • Karakter Unicode yang tidak sesuai dengan pengodean yang ditentukan. Jika karakter Unicode tidak sesuai dengan pengodean yang ditentukan, XmlTextWriter tidak lolos dari karakter Unicode ke dalam entitas karakter.
  • Atribut duplikat.
  • Karakter dalam pengidentifikasi publik atau pengidentifikasi sistem DOCTYPE.

Pertimbangan keamanan

Item berikut adalah hal-hal yang perlu dipertimbangkan XmlTextWriter saat bekerja dengan kelas .

  • Pengecualian yang dilemparkan oleh XmlTextWriter dapat mengungkapkan informasi jalur yang tidak ingin Anda gelembungkan ke aplikasi. Aplikasi Anda harus menangkap pengecualian dan memprosesnya dengan tepat.

  • Ketika Anda meneruskan ke XmlTextWriter aplikasi lain, aliran yang mendasar terekspos ke aplikasi tersebut. Jika Anda perlu meneruskan XmlTextWriter ke aplikasi semi-tepercaya, Anda harus menggunakan objek yang XmlWriter dibuat oleh metode sebagai gantinya Create .

  • XmlTextWriter tidak memvalidasi data apa pun yang diteruskan ke WriteDocType metode atau WriteRaw . Anda tidak boleh meneruskan data arbitrer ke metode ini.

  • Jika pengaturan default diubah, tidak ada jaminan bahwa output yang dihasilkan adalah data XML yang terbentuk dengan baik.

  • Jangan menerima komponen pendukung, seperti Encoding objek, dari sumber yang tidak tepercaya.