【发布时间】:2012-04-18 20:24:27
【问题描述】:
我正在尝试解析XML response,但我失败得很惨。我一开始以为
xml 只是没有在响应中返回,所以我制作了下面的代码,并直接链接到我的 xml 在线文件。我可以毫无问题地将XML 打印到屏幕上。但是,当我调用我的解析方法时,我得到 Premature end of file.
如果我直接传递 URL 就可以了:
- builder.parse("");
但是当我通过 InputStream 时失败:
-
builder.parse(connection.getInputStream());
try { URL url = new URL(xml); URLConnection uc = url.openConnection(); HttpURLConnection connection = (HttpURLConnection )uc; connection.setDoInput(true); connection.setDoOutput(true); InputStream instream; InputSource source; //get XML from InputStream if(connection.getResponseCode()>= 200){ connection.connect(); instream = connection.getInputStream(); parseDoc(instream); } else{ instream = connection.getErrorStream(); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } static void parseDoc(InputStream instream) throws ParserConfigurationException, SAXException, IOException{ BufferedReader buff_read = new BufferedReader(new InputStreamReader(instream,"UTF-8")); String inputLine = null; while((inputLine = buff_read.readLine())!= null){ System.out.println(inputLine); } DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance(); factory.isIgnoringElementContentWhitespace(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(instream); }
我得到的错误:
[Fatal Error] :1:1: Premature end of file.
org.xml.sax.SAXParseException: Premature end of file.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at com.ameba.api.network.MainApp.parseDoc(MainApp.java:78)
at com.ameba.api.network.MainApp.main(MainApp.java:41)
【问题讨论】:
-
您是否拥有要解析的 XML 文件。文件过早结束表示您的 XML 文件不完整,因为您在这里使用的是 URL 连接,我怀疑是网络问题。解决此问题的最佳方法是使用 wireshark 或 TCP 监视器类工具捕获此 XML 文件,然后检查它是否完整
-
@NiranjanBhat。是的,XML 是完整且有效的。我已经用直接链接解析了这个 xml。似乎只有在使用 InputStream 时才会出现错误。
-
为什么你在做一个 POST 但没有发送任何数据?
标签: java xml httpurlconnection