2009-05-28 7 views
10

मेरे पास एक्सएमएल है कि मुझे पार्स करने की ज़रूरत है लेकिन इसके निर्माण पर कोई नियंत्रण नहीं है। दुर्भाग्य से यह बहुत सख्त एक्सएमएल नहीं है और तरह बातें शामिल हैं:जावा में बुरी तरह गठित एक्सएमएल का विश्लेषण कैसे करें?

<mytag>This won't parse & contains an ampersand.</mytag> 

javax.xml.stream वर्गों सब पर यह पसंद नहीं है, और ठीक ही त्रुटि के साथ:

javax.xml.stream.XMLStreamException: ParseError at [row,col]:[149,50] 
Message: The entity name must immediately follow the '&' in the entity reference. 

मैं कैसे काम कर सकते हैं इस? मैं एक्सएमएल नहीं बदल सकता, इसलिए मुझे लगता है कि मुझे एक त्रुटि-सहिष्णु पार्सर चाहिए।

मेरी वरीयता एक ऐसे फिक्स के लिए होगी जो मौजूदा पार्सर कोड में बहुत अधिक व्यवधान की आवश्यकता नहीं है।

उत्तर

6

यदि यह मान्य XML (ऊपर) की तरह तो कोई XML पार्सर इसे संभाल कर दी जाएगी (आप की पहचान की है) नहीं है। यदि आप त्रुटियों (जैसे उपरोक्त इकाई समस्या) के दायरे को जानते हैं, तो सबसे सरल समाधान उस पर एक सही प्रक्रिया को चलाने के लिए हो सकता है (इकाइयों को सम्मिलित करने जैसी संस्थाओं को ठीक करना) और फिर इसे मौजूदा पार्सर को खिलाएं।

अन्यथा आपको ऐसे विसंगतियों के लिए अंतर्निहित समर्थन के साथ स्वयं को कोड करना होगा। और मैं विश्वास नहीं कर सकता कि यह एक कठिन और त्रुटि-प्रवण कार्य के अलावा कुछ भी है।

+0

+1 स्वयं को कोडिंग के लिए संभाल सकता है। ज्यादातर समय यह शायद एक बुरा विचार है, लेकिन बहुत ही सरल मामलों में यह विचार करने लायक है। – xdhmoore

1

मेरा मानना ​​है कि जेएसओपी बुरी तरह से गठित XML