2008-10-28 8 views
7

मैं एक तृतीय-पक्ष लाइब्रेरी का उपयोग कर रहा हूं जो "एक्सएमएल" लौटाता है जो मान्य नहीं है, क्योंकि इसमें अमान्य वर्ण हैं, साथ ही गैर-घोषित इकाइयां भी हैं। मुझे इस एक्सएमएल को पार्स करने के लिए जावा एक्सएमएल पार्सर का उपयोग करने की ज़रूरत है, लेकिन यह चौंकाने वाला है।जावा में खराब XML को स्वच्छ करना

क्या इस एक्सएमएल को स्वच्छ करने का एक सामान्य तरीका है ताकि यह वैध हो जाए?

उत्तर

6

मुझे लगता है कि अपने विकल्पों की तरह कुछ कर रहे हैं:

पहले दो अधिक हेवीवेट हैं, बशर्ते वे खराब गठित HTML को पार्स करने के लिए डिज़ाइन किए गए हों।

  • UTF-8
  • के लिए एक एन्कोडिंग मानकीकरण के बीच पाठ के लिए एक मानक एनकोडर का उपयोग करें: आप जानते हैं कि समस्याओं एन्कोडिंग और संस्थाओं की वजह से कर रहे हैं, लेकिन अन्यथा अच्छी तरह का गठन अगर मैं आप अपने खुद के रोल सुझाव देंगे > और < वर्ण (टेक्स्ट इकाइयां)।
+0

dom4j कुछ मामूली त्रुटियों के बावजूद पार्स की तुलना में एक और शक्तिशाली पार्सर है http://dom4j.sourceforge.net –

3

लगता है जैसे आपको एक पार्सर को सौंपने से पहले डेटा को स्वचालित रूप से साफ करने का कोई तरीका है या नहीं। कुछ वर्ण अमान्य कैसे हैं, घोषित वर्ण सेट में मान्य नहीं हैं, या अनपेक्षित XML मेटा-वर्ण जैसे '<'?

गैर-घोषित इकाइयों के लिए, मैंने एक बार एक त्रुटि हैंडलर के साथ एक SAX पार्सर को कॉन्फ़िगर करके हल किया जो मूल रूप से इन त्रुटियों को अनदेखा करता था। इससे आपको भी मदद मिल सकती है। ErrorHandler एपीआई देखें।

0

अवैध पात्रों के लिए, मैं फ़िल्टरिंग रीडर को कार्यान्वित करने की अनुशंसा करता हूं; बस उन्हें स्थानांतरित करें (माना जाता है कि ये नियंत्रण वर्ण हैं) अंतरिक्ष के साथ, या बाहर पट्टी।

अविकसित इकाइयां ट्रिकियर हैं; कुछ एक्सएमएल पार्सर्स आपको उपयोग करने के लिए वैकल्पिक डीटीडी को परिभाषित करने की अनुमति देते हैं (Woodstox कम से कम करता है। यदि ऐसा है, तो आप डीटीडी इंजेक्ट कर सकते हैं जो आपको आवश्यक इकाइयों की घोषणा करता है।

संबंधित मुद्दे