2010-09-20 65 views
0

我有一個問題,我的XML文件加載緩慢,並且在開始解析之前沒有完成下載,從我的解析器中拋出xml格式不正常的異常,顯示文件未完整下載。如何讓SAX解析器在解析之前等待文件完成下載?

從logcat的完整的誤差爲 「ERROR /錯誤(323):errororg.apache.harmony.xml.ExpatParser $ ParseException的:在第10行,列46:沒有很好地形成(標記無效)」

我知道這個xml文件是正確的,因爲它有時會起作用,我也可以在瀏覽器中查看它並查看它。

在繼續和解析xml數據之前,使解析器等待InputSource的最佳方式是什麼?

下面的代碼是我用來獲取文件並解析它的代碼。

SAXParserFactory spf = SAXParserFactory.newInstance(); 
SAXParser sp = spf.newSAXParser(); 
XMLReader xr = sp.getXMLReader(); 
GradeHandler gradeHandler = new GradeHandler(); 
xr.setContentHandler(gradeHandler); 
URL url = new URL("https://url/to/xml/file"); 
HttpsURLConnection ucon = (HttpsURLConnection)url.openConnection(); 
ucon.setHostnameVerifier(new AllowAllHostnameVerifier()); 
xr.parse(new InputSource(new BufferedInputStream(ucon.getInputStream()))); 

回答

3

會是什麼使 解析器等待的InputSource 之前繼續就和解析XML 數據的最佳方式是什麼?

也許在使用之前先下載響應?

ByteArrayOutputStream output = new ByteArrayOutputStream(); 
copy(ucon.getInputStream(), output); 
xr.parse(new InputSource(new ByteArrayInputStream(output.toByteArray()); 
+0

這與我的方法有同樣的問題。在解析文件之前,整個文件沒有被抓取,導致解析器拋出無效的令牌異常。 – 2010-09-21 14:11:02

+0

如何?如果您從InputStream中讀取,直到EOF,您將擁有整個文件。情況並非如此嗎? – Kevin 2010-09-21 17:31:20