आपके वास्तविक डेटा या स्रोत के बिना, हमारे लिए यह पता लगाना कठिन होगा कि क्या गलत हो रहा है। हालांकि, मैं कुछ सुझाव दे सकता हूं:
- यूनिकोड एनयूएल (0x00) एक्सएमएल के सभी संस्करणों में अवैध है और मान्य करने वाले पार्सर्स को इसमें शामिल इनपुट को अस्वीकार करना होगा।
- उपरोक्त के बावजूद; वास्तविक दुनिया के गैर-मान्य एक्सएमएल में किसी भी तरह का कचरा हो सकता है, जिसकी कल्पना की जा सकती है।
- XML 1.1 शून्य-चौड़ाई और गैर-मुद्रण नियंत्रण वर्णों (NUL को छोड़कर) की अनुमति देता है, इसलिए आप टेक्स्ट संपादक में XML 1.1 फ़ाइल को नहीं देख सकते हैं और बता सकते हैं कि इसमें कौन से वर्ण हैं।
आपने जो लिखा है उसे देखते हुए, मुझे संदेह है कि जो कुछ भी डेटाबेस डेटा को एक्सएमएल में परिवर्तित करता है वह टूटा हुआ है; यह गैर-XML वर्णों का प्रचार कर रहा है।
गैर-एक्सएमएल वर्णों (एनयूएल, डीईएल, नियंत्रण वर्ण, आदि) के साथ कुछ डेटाबेस प्रविष्टियां बनाएं और उस पर अपना एक्सएमएल कनवर्टर चलाएं। एक्सएमएल को फाइल में आउटपुट करें और इसे हेक्स एडिटर में देखें। यदि इसमें गैर-XML वर्ण हैं, तो आपका कनवर्टर टूट गया है। इसे ठीक करें या, यदि आप नहीं कर सकते हैं, तो एक प्रीप्रोसेसर बनाएं जो ऐसे वर्णों के साथ आउटपुट को अस्वीकार करता है।
यदि कनवर्टर आउटपुट अच्छा दिखता है, तो समस्या आपके XML उपभोक्ता में है; यह कहीं गैर-XML वर्ण सम्मिलित कर रहा है। आपको अपनी खपत प्रक्रिया को अलग-अलग चरणों में तोड़ना होगा, प्रत्येक चरण में आउटपुट की जांच करनी होगी और खराब वर्णों का परिचय देना होगा।
फ़ाइल एन्कोडिंग जांचें (UTF-16 के लिए)
अद्यतन:मैं अभी इसका एक उदाहरण में भाग गया! क्या हो रहा था कि निर्माता एक्सएमएल को यूटीएफ 16 के रूप में एन्कोड कर रहा था और उपभोक्ता यूटीएफ 8 की उम्मीद कर रहा था। चूंकि UTF16 सभी ASCII वर्णों के लिए 0x00 को उच्च बाइट के रूप में उपयोग करता है और UTF8 नहीं करता है, इसलिए उपभोक्ता हर दूसरे बाइट को NUL के रूप में देख रहा था। मेरे मामले में मैं एन्कोडिंग बदल सकता था, लेकिन सुझाव दिया कि सभी एक्सएमएल पेलोड बीओएम से शुरू होते हैं।