मुझे एंड्रॉइड पर एक XML दस्तावेज़ को पार्स करने का प्रयास करते समय "SAXParseException: दस्तावेज़ का अप्रत्याशित अंत" त्रुटि मिल रही है।एंड्रॉइड पर सैक्सपर्सर: दस्तावेज़ अपवाद का अप्रत्याशित अंत
प्रश्न में दस्तावेज़ Google मौसम एपीआई से है, लेकिन यह xml फ़ाइल के सवाल के बावजूद एक ही त्रुटि फेंकने लगता है (जब तक कि एक्सएमएल मान्य है) तो मुझे संदेह है कि यह मेरे दृष्टिकोण के साथ एक समस्या है, बल्कि एक्सएमएल की तुलना में।
यह एक सीखने व्यायाम के रूप में किया जा रहा है, तो मैं शायद (उम्मीद) कुछ स्पष्ट =)
मैं एक ऑनलाइन सत्यापनकर्ता के माध्यम से एक्सएमएल दौड़े हैं अनदेखी की है, और यह अच्छी तरह से गठन किया जा रहा है वापस आता है। (मुझे यह नहीं बता सकता कि यह वैध है क्योंकि मेरे पास डीटीडी नहीं है, लेकिन मुझे नहीं लगता कि मुझे एक्सएमएल को पार्स करने के लिए डीटीडी की आवश्यकता है)।
private void refreshForecast()
URL url;
try {
url = new URL("http://192.168.1.66:8000/google4.xml");
URLConnection connection = url.openConnection();
HttpURLConnection httpConnection = (HttpURLConnection)connection;
int responseCode = httpConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream in = httpConnection.getInputStream();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
// falls over here parsing the xml.
Document dom = db.parse(in);
}
} catch (ManyExceptions e) {
....
}
एक्सएमएल कि त्रुटि पैदा करता है की एक cutdown संस्करण है:
<?xml version="1.0"?>
<xml_api_reply version="1">
<weather>
<forecast_information>
<city>Hamilton</city>
</forecast_information>
</weather>
</xml_api_reply>
स्टैकट्रेस है
इस कोड है कि मैं कोशिश करते हैं और फ़ाइल को पार्स करने का उपयोग कर रहा है:
11-20 06:17:24.416: WARN/System.err(406): org.xml.sax.SAXParseException: Unexpected end of document
11-20 06:17:24.416: WARN/System.err(406): at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:131)
11-20 06:17:24.416: WARN/System.err(406): at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:110)
11-20 06:17:24.426: WARN/System.err(406): at com.dave.nzweather.WeatherApp.refreshForecast(WeatherApp.java:159)
11-20 06:17:24.426: WARN/System.err(406): at com.dave.nzweather.WeatherApp.onCreate(WeatherApp.java:100)
11-20 06:17:24.426: WARN/System.err(406): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-20 06:17:24.438: WARN/System.err(406): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-20 06:17:24.438: WARN/System.err(406): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-20 06:17:24.446: WARN/System.err(406): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-20 06:17:24.446: WARN/System.err(406): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-20 06:17:24.456: WARN/System.err(406): at android.os.Handler.dispatchMessage(Handler.java:99)
11-20 06:17:24.456: WARN/System.err(406): at android.os.Looper.loop(Looper.java:123)
11-20 06:17:24.456: WARN/System.err(406): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-20 06:17:24.466: WARN/System.err(406): at java.lang.reflect.Method.invokeNative(Native Method)
11-20 06:17:24.466: WARN/System.err(406): at java.lang.reflect.Method.invoke(Method.java:521)
11-20 06:17:24.466: WARN/System.err(406): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-20 06:17:24.476: WARN/System.err(406): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-20 06:17:24.476: WARN/System.err(406): at dalvik.system.NativeStart.main(Native Method)
11-20 06:17:24.486: WARN/ROGER(406): org.xml.sax.SAXParseException: Unexpected end of document
ब्रेवटी के हित में, मैंने मूल एक्सएमएल शामिल नहीं किया है, लेकिन यह केवल मानक वजन है googles फ़ीड से er xml।
मैंने कुछ पूरी तरह से अलग एक्सएमएल फाइलों की कोशिश की है, (http://www.ibm.com/developerworks/xml/library/x-android/ से नमूना समेत) और वे सभी एक ही त्रुटि देते हैं। (जब वे उन्हें ऑनलाइन एक्सएमएल वैधकर्ता के माध्यम से चलाते हैं तो वे सभी भी मान्य होते हैं)।
इससे मुझे लगता है कि यह xml के साथ कोई समस्या नहीं है, बल्कि इसके बजाय मैं इसे पार्सर में कैसे खिला रहा हूं।
चीयर्स
डेव Smylie
क्या आपने पहले पूरी फ़ाइल में पढ़ने की कोशिश की है? मुझे याद है कि बहुत समय पहले ऐसा कोई मुद्दा है, शायद यह मदद करता है। –
मुझे ऐसा लगता है - मैं android.util.log के माध्यम से पुनर्प्राप्त फ़ाइल को डंप कर रहा हूं और यह वहां पूरी फ़ाइल दिखा रहा है। हालांकि, मैं उस स्ट्रिंगबफर में इनपुटस्ट्रीम चला रहा हूं, इसलिए यह संभव है कि लॉग पूरी तरह से समाप्त हो रही स्ट्रीम हो रही है, जहां पार्स() को अधूरा स्ट्रीम मिल रहा है .... मैं देखता हूं कि मैं इसे स्ट्रिंगबफर में बदल सकता हूं या नहीं पार्स कि ... –