xml - क्या एक वैध एक्सएमएल फ़ाइल को एक्सएमएल घोषणा की आवश्यकता है?




xml-declaration (2)

मैं Xerces के सैक्स पार्सर का उपयोग कर एक एक्सएमएल फ़ाइल पार्स कर रहा हूं।
एक्सएमएल घोषणा <?xml version="1.0" encoding="UTF-8"?> आवश्यक है?


एक्सएमएल 1.0 में, एक्सएमएल घोषणा वैकल्पिक हैएक्सएमएल 1.0 सिफारिश के खंड 2.8 देखें, जहां यह कहता है कि इसे "चाहिए" इस्तेमाल किया जाना चाहिए - जिसका अर्थ है कि इसकी अनुशंसा की जाती है, लेकिन अनिवार्य नहीं है। एक्सएमएल 1.1 में, हालांकि, घोषणा अनिवार्य हैएक्सएमएल 1.1 सिफारिश के खंड 2.8 देखें, जहां यह कहता है "जरूरी" इस्तेमाल किया जाना चाहिए। यह भी कहता है कि यदि घोषणा अनुपस्थित है, तो स्वचालित रूप से यह संकेत मिलता है कि दस्तावेज़ एक XML 1.0 दस्तावेज़ है।

ध्यान दें कि एक एक्सएमएल घोषणा में 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"?>

यदि आप इस तरह से एन्कोडिंग निर्दिष्ट नहीं करते हैं, तो एक्सएमएल पार्सर्स यह अनुमान लगाने का प्रयास करते हैं कि एन्कोडिंग का उपयोग किस प्रकार किया जा रहा है। एक्सएमएल 1.0 सिफारिश एक संभावित तरीके से वर्णन करती है कि चरित्र एन्कोडिंग को स्वतः पता लगाया जा सकता है । व्यावहारिक रूप से, यदि इनपुट यूटीएफ -8, यूटीएफ -16 या यूएस-एएससीआईआईआई के रूप में एन्कोड किया गया है तो यह कोई समस्या नहीं है। Autodetection काम नहीं करता है जब यह 8-बिट एन्कोडिंग का सामना करता है जो यूएस-एएससीआईआईआई रेंज (जैसे आईएसओ 885 9 -1) के बाहर वर्णों का उपयोग करता है - यदि आप कर सकते हैं तो इन्हें बनाने से बचें।

standalone इंगित करता है कि XML दस्तावेज़ को डीटीडी के बिना सही तरीके से संसाधित किया जा सकता है या नहीं। लोग शायद ही कभी इसका इस्तेमाल करते हैं। इन दिनों, एक एक्सएमएल प्रारूप तैयार करना बुरा है जिसमें इसके डीटीडी के बिना जानकारी गुम है।

अद्यतन करें:

एक "prolog त्रुटि / अमान्य utf-8 एन्कोडिंग" त्रुटि इंगित करता है कि फ़ाइल के अंदर पार्सर पाया गया वास्तविक डेटा एन्कोडिंग से मेल नहीं खाता है जो एक्सएमएल घोषणा कहती है। या कुछ मामलों में फ़ाइल के अंदर डेटा autodetected एन्कोडिंग से मेल नहीं खाता था।

चूंकि आपकी फ़ाइल में बाइट-ऑर्डर-मार्क (बीओएम) है, यह यूटीएफ -16 एन्कोडिंग में होना चाहिए। मुझे संदेह है कि आपकी घोषणा <?xml version="1.0" encoding="UTF-8"?> कहती है <?xml version="1.0" encoding="UTF-8"?> जो स्पष्ट रूप से गलत है जब फ़ाइल को नोटपैड द्वारा यूटीएफ -16 में बदल दिया गया है। सरल समाधान encoding को निकालना है और बस <?xml version="1.0"?> कहें। आप इसे encoding="UTF-16" कहने के लिए भी संपादित कर सकते हैं लेकिन यह मूल फ़ाइल (जो यूटीएफ -16 में नहीं था) के लिए गलत होगा या अगर फ़ाइल किसी भी तरह यूटीएफ -8 या कुछ अन्य एन्कोडिंग में बदल जाती है।

बीओएम को हटाने की कोशिश न करें - यह समस्या का कारण नहीं है। एक्सएमएल को संपादित करने के लिए नोटपैड या वर्डपैड का उपयोग करना वास्तविक समस्या है!


एक्सएमएल घोषणा वैकल्पिक है इसलिए आपका एक्सएमएल इसके बिना अच्छी तरह से गठित है। लेकिन इसका उपयोग करने की अनुशंसा की जाती है ताकि पार्सर्स द्वारा गलत धारणाएं न की जाए, विशेष रूप से उपयोग किए गए एन्कोडिंग के बारे में।





xml-declaration