我遇到一个问题,我的XML文件加载速度很慢,并且在开始解析之前没有完成下载,这会从我的解析器中抛出一个xml格式不正确的异常,表明该文件未完全下载。
来自logcat的完整错误是“错误/错误(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())));
答案 0 :(得分:3)
最好的方法是什么? 解析器之前等待InputSource 继续并解析xml 数据?
也许在使用之前首先下载响应?
ByteArrayOutputStream output = new ByteArrayOutputStream();
copy(ucon.getInputStream(), output);
xr.parse(new InputSource(new ByteArrayInputStream(output.toByteArray());