Fab*_*bii 26 java xml httpurlconnection
我试图解析XML response,但我失败了.我最初认为xml只是没有在回复中返回,所以我通过直接链接到我的xml文件在线制作了下面的代码.我能够毫无问题地打印XML到屏幕.但是,当我调用我的parse方法时,我得到文件的过早结束.
如果我直接传递URL,它可以工作:
但是当我传递一个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);
}
Run Code Online (Sandbox Code Playgroud)我得到的错误:
[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)
Run Code Online (Sandbox Code Playgroud)
sbr*_*ges 30
当你这样做,
while((inputLine = buff_read.readLine())!= null){
System.out.println(inputLine);
}
Run Code Online (Sandbox Code Playgroud)
你在instream中消耗了所有东西,所以instream是空的.现在,当试图这样做,
Document doc = builder.parse(instream);
Run Code Online (Sandbox Code Playgroud)
解析将失败,因为您已经传递了一个空流.
| 归档时间: |
|
| 查看次数: |
170501 次 |
| 最近记录: |