Semua artikel

XML Entities: meng-escape karakter dalam dokumen XML

Sama seperti HTML, XML memakai tanda kurung sudut dan tanda ampersand untuk menandai tag, jadi karakter-karakter ini tidak boleh muncul apa adanya di dalam teks — dokumen jadi tidak valid, dan berbeda dari browser yang memaafkan HTML rusak, parser XML langsung berhenti dengan error.

Lima entity yang wajib

Berbeda dari HTML yang punya ratusan entity bernama, spesifikasi XML hanya mewajibkan lima:

  • &lt; — pengganti <
  • &gt; — pengganti >
  • &amp; — pengganti &
  • &apos; — pengganti kutip tunggal '
  • &quot; — pengganti kutip ganda "

Tanda kutip hanya wajib di-escape di dalam nilai atribut, sementara < dan & wajib di-escape di mana pun dalam isi teks.

Di mana ini benar-benar dipakai

Sistem e-Faktur pajak di Indonesia mengekspor data transaksi dalam format XML, dan nama perusahaan yang mengandung tanda & — misalnya "Toko Jaya & Rekan" — bisa membuat seluruh berkas tidak valid kalau tidak di-escape. Masalah yang sama muncul di RSS feed media online: satu judul berita dengan & yang belum di-escape membuat seluruh feed gagal dibaca oleh aplikasi pembaca berita.

Kenapa XML lebih ketat dari HTML

Browser biasanya memaafkan HTML yang rusak dan tetap mencoba menampilkan halamannya. Parser XML tidak begitu — satu tanda & atau kurung sudut yang tidak di-escape membuat seluruh dokumen tidak valid, dan pemrosesan langsung berhenti dengan error.

Kapan ini dibutuhkan

  • Menyiapkan teks dari input pengguna sebelum dimasukkan ke dokumen XML (feed, file konfigurasi, pesan SOAP).
  • Debugging: melihat teks asli di balik entity dalam XML yang diterima.
  • Mengedit file XML secara manual tanpa merusak struktur dokumen.

Alternatif entity: bagian CDATA

Kalau sebuah blok teks mengandung banyak karakter khusus — misalnya potongan HTML atau kode yang disisipkan ke dalam XML — lebih praktis membungkusnya dengan <![CDATA[...]]>, di mana < dan & tidak perlu di-escape dan diperlakukan sebagai teks biasa. Satu-satunya pengecualian adalah urutan ]]>, yang menutup CDATA sehingga tidak boleh muncul di dalam isi bagian itu sendiri.

Coba alat