ฉันกำลังแยกวิเคราะห์ไฟล์ XML โดยใช้ Sax Parser ของ Xerces จำเป็นต้องมี
การประกาศ XML <?xml version="1.0" encoding="UTF-8"?>
หรือไม่
ฉันกำลังแยกวิเคราะห์ไฟล์ XML โดยใช้ Sax Parser ของ Xerces จำเป็นต้องมี
การประกาศ XML <?xml version="1.0" encoding="UTF-8"?>
หรือไม่
คำตอบ:
ในรูปแบบ XML 1.0 ที่XML ประกาศเป็นตัวเลือก ดูส่วนที่ 2.8 ของคำแนะนำ XML 1.0ซึ่งระบุว่า "ควร" ใช้ซึ่งหมายความว่าแนะนำ แต่ไม่บังคับ ในรูปแบบ XML 1.1 แต่การประกาศเป็นผู้ได้รับมอบอำนาจ ดูส่วน 2.8 ของคำแนะนำ XML 1.1ซึ่งระบุว่า "ต้อง" จึงจะใช้ได้ มันยังระบุต่อไปว่าหากไม่มีการประกาศแสดงว่าเอกสารนั้นเป็นเอกสาร XML 1.0 โดยอัตโนมัติ
โปรดทราบว่าในXML ประกาศencoding
และstandalone
มีทั้งที่ไม่จำเป็น เพียง แต่version
มีผลบังคับใช้ นอกจากนี้เหล่านี้จะไม่แอตทริบิวต์ดังนั้นหากพวกเขามีอยู่พวกเขาจะต้องอยู่ในลำดับที่: version
ตามด้วยการใด ๆตามด้วยการใด ๆencoding
standalone
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
หากคุณไม่ระบุการเข้ารหัสด้วยวิธีนี้ตัวแยกวิเคราะห์ XML จะพยายามเดาว่ากำลังใช้การเข้ารหัสอะไร คำแนะนำ XML 1.0 อธิบายวิธีการเข้ารหัสอักขระที่เป็นไปได้วิธีหนึ่งที่สามารถตรวจจับอัตโนมัติได้ ในทางปฏิบัตินี่ไม่ใช่ปัญหามากนักหากอินพุตถูกเข้ารหัสเป็น UTF-8, UTF-16 หรือ US-ASCII การตรวจจับอัตโนมัติจะไม่ทำงานเมื่อพบการเข้ารหัส 8 บิตที่ใช้อักขระนอกช่วง US-ASCII (เช่น ISO 8859-1) - หลีกเลี่ยงการสร้างสิ่งเหล่านี้หากทำได้
standalone
บ่งชี้ว่าเอกสาร XML สามารถประมวลผลได้อย่างถูกต้องโดยไม่ต้อง DTD หรือไม่ คนไม่ค่อยใช้กัน ทุกวันนี้การออกแบบรูปแบบ XML ที่ขาดข้อมูลโดยไม่มี DTD เป็นเรื่องไม่ดี
ปรับปรุง:
ข้อผิดพลาด "ข้อผิดพลาด prolog / การเข้ารหัส utf-8 ไม่ถูกต้อง" บ่งชี้ว่าข้อมูลจริงที่ตัวแยกวิเคราะห์พบภายในไฟล์ไม่ตรงกับการเข้ารหัสที่การประกาศ XML ระบุว่าเป็น หรือในบางกรณีข้อมูลภายในไฟล์ไม่ตรงกับการเข้ารหัสที่ตรวจพบอัตโนมัติ
เนื่องจากไฟล์ของคุณมี byte-order-mark (BOM) จึงควรอยู่ในการเข้ารหัส UTF-16 ฉันสงสัยว่าคำประกาศของคุณระบุว่า<?xml version="1.0" encoding="UTF-8"?>
ไม่ถูกต้องอย่างเห็นได้ชัดเมื่อไฟล์ถูกเปลี่ยนเป็น UTF-16 โดย NotePad ทางออกที่ง่ายคือการลบและก็พูดว่าencoding
<?xml version="1.0"?>
คุณยังสามารถแก้ไขเพื่อพูดได้encoding="UTF-16"
แต่นั่นจะผิดสำหรับไฟล์ต้นฉบับ (ซึ่งไม่ได้อยู่ใน UTF-16) หรือหากไฟล์ถูกเปลี่ยนกลับเป็น UTF-8 หรือการเข้ารหัสอื่น ๆ
อย่ากังวลกับการพยายามลบ BOM - นั่นไม่ใช่สาเหตุของปัญหา การใช้ NotePad หรือ WordPad เพื่อแก้ไข XML คือปัญหาที่แท้จริง!
การประกาศ Xml เป็นทางเลือกเพื่อให้ xml ของคุณมีรูปแบบที่ดีหากไม่มี แต่ขอแนะนำให้ใช้เพื่อไม่ให้ตัววิเคราะห์ตั้งสมมติฐานที่ผิดโดยเฉพาะเกี่ยวกับการเข้ารหัสที่ใช้
จำเป็นก็ต่อเมื่อคุณไม่ได้ใช้ค่าเริ่มต้นสำหรับversion
และencoding
(ซึ่งคุณอยู่ในตัวอย่างนั้น)