Bagikan melalui


Kelas System.Xml.XmlTextWriter

Nota

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

Kelas XmlTextWriter mengimplementasikan kelas XmlWriter.

Nota

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 ruang nama ke elemen akar untuk mencegah duplikasinya pada dua elemen anak. Elemen turunan mengambil awalan dari deklarasi ruang nama.

<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 XML <x:node xmlns:x="abc"/>.

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 yang memetakan awalan yang berbeda ke URI namespace yang sama, XmlTextWriter menelusuri tumpukan deklarasi namespace dari belakang 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 panggilan WriteAttributeString tidak menentukan awalan, si penulis menggunakan awalan terakhir yang didorong ke tumpukan namespace, 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, XmlTextWriter menyelesaikannya dengan menghasilkan awalan alternatif. Misalnya, jika atribut dan elemen memiliki awalan yang sama tetapi namespace yang berbeda, XmlWriter menghasilkan prefiks 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 bertipe kuat, gunakan kelas XmlConvert 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 yang berulang.
  • Karakter dalam pengidentifikasi publik DOCTYPE atau pengidentifikasi sistem.

Pertimbangan keamanan

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

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

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

  • XmlTextWriter tidak memvalidasi data apa pun yang diteruskan ke WriteDocType metode atau WriteRaw . Anda sebaiknya jangan meneruskan data sembarang ke metode-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.