เช่นเดียวกับ HTML, XML ใช้วงเล็บมุมและเครื่องหมายแอมเปอร์แซนด์เพื่อกำกับแท็ก ดังนั้นสัญลักษณ์เหล่านี้จึงปรากฏตรง ๆ ในเนื้อหาข้อความไม่ได้ — เอกสารจะกลายเป็น XML ที่ไม่ถูกต้อง และต่างจากเบราว์เซอร์ที่ "ให้อภัย" HTML ที่พัง ตัว parser ของ XML จะหยุดทำงานทันทีพร้อมแจ้งข้อผิดพลาด
เอนทิตีบังคับ 5 ตัว
ต่างจาก HTML ที่มีเอนทิตีชื่อเฉพาะนับร้อยตัว ข้อกำหนดของ XML บังคับแค่ 5 ตัวเท่านั้น
<— แทน<>— แทน>&— แทน&'— แทนเครื่องหมายอัญประกาศเดี่ยว'"— แทนเครื่องหมายอัญประกาศคู่"
เครื่องหมายอัญประกาศจำเป็นต้อง escape เฉพาะภายในค่าของ attribute เท่านั้น ส่วน < และ & ต้อง escape ทุกที่ในเนื้อหาข้อความ
ที่ใช้จริงในทางปฏิบัติ
ระบบ e-Tax Invoice ของกรมสรรพากรไทยส่งข้อมูลใบกำกับภาษีในรูปแบบ XML และชื่อบริษัทที่มีเครื่องหมาย & เช่น "ร้านสมชาย & บุตร" จะทำให้ทั้งไฟล์ไม่ถูกต้องหากไม่ได้ escape ปัญหาเดียวกันเกิดขึ้นกับ RSS feed ของเว็บข่าว — พาดหัวข่าวที่มี & ไม่ได้ escape เพียงจุดเดียวก็ทำให้ feed ทั้งหมดอ่านไม่ได้สำหรับผู้ติดตาม
ทำไม XML เข้มงวดกว่า HTML
เบราว์เซอร์มักจะให้อภัย HTML ที่ผิดรูปแบบและพยายามแสดงหน้าเว็บต่อไปแม้จะมีข้อผิดพลาด แต่ parser ของ XML ไม่ทำแบบนั้น — แค่แอมเปอร์แซนด์หรือวงเล็บมุมที่ไม่ได้ escape เพียงจุดเดียวก็ทำให้เอกสารทั้งหมดไม่ถูกต้อง และการประมวลผลจะหยุดทันทีพร้อมข้อผิดพลาด
เมื่อไหร่ที่ต้องใช้
- เตรียมข้อความจากผู้ใช้ก่อนแทรกลงในเอกสาร XML (ฟีด ไฟล์การตั้งค่า ข้อความ SOAP)
- ตรวจสอบ: ดูข้อความดิบที่ซ่อนอยู่หลังเอนทิตีใน XML ที่ได้รับมา
- แก้ไขไฟล์ XML ด้วยมือโดยไม่ทำให้โครงสร้างเอกสารพัง
ทางเลือกแทนเอนทิตี: ส่วน CDATA
เมื่อบล็อกข้อความมีอักขระพิเศษจำนวนมาก เช่น ชิ้นส่วน HTML หรือโค้ดที่ฝังอยู่ใน XML การห่อด้วย <![CDATA[...]]> จะสะดวกกว่า เพราะภายในส่วนนี้ < และ & ไม่ต้อง escape และถูกอ่านเป็นข้อความธรรมดา ข้อยกเว้นเดียวคือลำดับ ]]> ซึ่งใช้ปิด CDATA จึงปรากฏอยู่ภายในเนื้อหาของส่วนนั้นเองไม่ได้