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.