2010-03-23 27 views
7

सबसे पहले, मुझे कहना है कि मैं सैक्स और जावा के लिए नया हूं।मार्कअप अच्छी तरह से गठित होना चाहिए

मैं एक XML फ़ाइल से जानकारी पढ़ने की कोशिश कर रहा हूं जो अच्छी तरह से गठित नहीं है।

मैं SAX या डोम पार्सर मैं जवाब में निम्नलिखित त्रुटि मिलती है उपयोग करने के लिए प्रयास करते हैं:

<format type="filename" t="13241">0;W650;004;AG-Erzgeb</format> 
<format type="driver" t="123412">001;023</format> 
    ... 

मैं मजबूर कर सकते हैं:

The markup in the document following the root element must be well-formed. 

यह कैसे मैं अपने एक्सएमएल फ़ाइल की स्थापना की है एसएक्स या डोम एक्सएमएल फाइलों को पार्स करने के लिए भले ही वे अच्छी तरह से एक्सएमएल नहीं बने हैं?

आपकी मदद के लिए धन्यवाद। बहुत सराहना की। Haythem

+2

एफवाईआई: परिभाषा के अनुसार ... यदि यह अच्छी तरह से गठित नहीं है तो यह ** ** ** एक्सएमएल नहीं है। http://en.wikipedia.org/wiki/XML#Well-formedness_and_error-handing –

उत्तर

18

आपकी सबसे अच्छी शर्त एक्सएमएल को अच्छी तरह से गठित करने के लिए है, शायद इसे थोड़ा-सा प्रोसेसिंग करके। इस मामले में, आपको लगता है कि प्राप्त कर सकते हैं बस (और यहां तक ​​कि वह वैकल्पिक है) इस तरह पर एक XML घोषणा डालने और एक मूल तत्व (जो वैकल्पिक नहीं है) प्रदान करने, द्वारा:

<?xml version="1.0"?> 
<wrapper> 
    <format type="filename" t="13241">0;W650;004;AG-Erzgeb</format> 
    <format type="driver" t="123412">001;023</format> 
</wrapper> 

वहाँ मैं मनमाने ढंग से चुनी गई मूल तत्व के लिए नाम "रैपर"; यह जो भी आपको पसंद हो सकता है।

+7

मैं बस यह जोड़ना चाहता हूं कि आपको डिस्क पर उस संशोधन को करने की आवश्यकता नहीं है, लेकिन आप इसे कर सकते हैं एक फ़िल्टरिंग 'इनपुटस्ट्रीम'/'रीडर 'प्रदान करके उड़ें। विशेष रूप से बड़ी फ़ाइलों के लिए (या एक यूआरएल से एक्सएमएल पढ़ने) यह बहुत उपयोगी हो सकता है। एक 'अनुक्रम इनपुट स्ट्रीम' यहां उपयोगी हो सकता है: http://java.sun.com/javase/6/docs/api/java/io/SequenceInputStream.html –

+0

अच्छी विश्वसनीयता। पार्स को बाहर निकालना आसान नहीं है? क्या मैं पार्स() मेहटोड को बदल सकता हूं और गैर-अच्छी तरह से गठित स्थिति को अनदेखा करने के लिए इसे ओवरराइट कर सकता हूं? – Haythem

+2

हेथहेम: शायद नहीं, क्योंकि पार्सर लाइब्रेरी के भीतर गहरा है और ऐसे ब्राउज़र का व्यवहार अपरिभाषित होगा (एक्सएमएल पुस्तकालयों को यह नहीं पता कि एक्सएमएल को एक से अधिक रूट तत्वों से कैसे संभालना है)। इसे इस तरह से करने से आपका एक्सएमएल अच्छी तरह से गठित हो जाता है और ** सभी ** एक्सएमएल-जागरूक उपकरण अचानक इसे ठीक से संभाल सकते हैं (बशर्ते आपके पास कोई अन्य गलत भाग न हो)। –

1

संकेत: sax या stax का उपयोग करके आप FIRST "अच्छी तरह से गठित" त्रुटि का सामना करने तक सफलतापूर्वक एक अच्छी तरह से गठित XML दस्तावेज़ का विश्लेषण नहीं कर सकते हैं।

(मुझे पता है कि यह बहुत ज्यादा मदद नहीं है ...)

0

के रूप में डोम आप xml फ़ाइल फिर एक पेड़ का निर्माण स्कैन करेगा, पेड़ की जड़ नोड की तरह के रूप में 1 जवाब है। हालांकि, अगर पार्सर या यहां तक ​​कि नहीं मिल पा रहा है, तो यह पेड़ भी बना सकता है। तो, डीओएम या सैक्स द्वारा पार्सर से पहले एक्सएमएल फाइल को प्री-प्रोसेसिंग करना बेहतर होता है।

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