XmlSerializer mengharuskan kita mendefinisikan class pemetaan. Pendekatan itu tidak selalu perlu: XmlWriter menulis token XML satu per satu, sedangkan XmlReader membaca dokumen maju terus (forward-only) tanpa memuat seluruh pohon ke memori. Pasangan ini bekerja di namespace System.Xml dan menjadi pilihan hemat memori untuk dokumen besar seperti ekspor ribuan baris, karena konsumsi memorinya tetap sepanjang ukuran dokumen.
Menulis dan Membaca #
Contoh berikut menulis satu dokumen pesanan, lalu membaca ulang isi elemennya:
var settings = new XmlWriterSettings { Indent = true };
var buffer = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(buffer, settings))
{
writer.WriteStartElement("pesanan");
writer.WriteElementString("nomor", "INV-001");
writer.WriteElementString("total", "125000");
writer.WriteEndElement();
}
Console.WriteLine(buffer.ToString());
using XmlReader reader = XmlReader.Create(new StringReader(buffer.ToString()));
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element && reader.Name != "pesanan")
{
string nama = reader.Name;
string isi = reader.ReadElementContentAsString();
Console.WriteLine($"{nama} = {isi}");
}
}Output yang Dihasilkan:
<?xml version="1.0" encoding="utf-16"?>
<pesanan>
<nomor>INV-001</nomor>
<total>125000</total>
</pesanan>Bagian pembacaan menghasilkan:
nomor = INV-001
total = 125000Mari kita bedah bagian pentingnya:
XmlWriterSettings { Indent = true }: mengaktifkan indentasi agar dokuman mudah dibaca; untuk payload produksi, indentasi hanya memperbesar ukuran.WriteStartElement…WriteEndElement: writer menjaga tumpukan elemen, sehingga struktur<pesanan>menutup dengan benar secara otomatis.while (reader.Read()): reader maju node demi node: deklarasi XML, elemen akar, lalu elemen anak.- Filter
NodeTypedanName: hanya nodeElementselain akar yang diproses, sehingga deklarasi dan teks spasi putih terlewati. ReadElementContentAsString: method tersebut membaca seluruh isi elemen saat ini dan memajukan reader ke node berikutnya; nama elemen karenanya disimpan dulu di variabelnamasebelum isi dibaca.
Kedua class juga menerima XmlReaderSettings dan XmlWriterSettings untuk menyetel perilaku seperti indentasi, penanganan spasi putih, dan pemeriksaan kesesuaian karakter. Dengan settings yang disimpan sebagai satu objek konfigurasi, dokumen yang ditulis dan dibaca aplikasi selalu mengikuti aturan yang sama.