Ich versuche zu analysieren und XML response
, aber ich versage kläglich. Ich dachte zunächst , dass die xml
wurde gerade nicht in der Antwort zurückgegeben, so dass ich den Code unten mit einem direkten Link zu meiner xml
Datei online. Ich bin in der Lage, die XML
zum Bildschirm ohne Probleme zu drucken. Wenn ich jedoch meine Parse-Methode aufrufen, bekomme ich Vorzeitiges Ende der Datei.Warum erhalte ich diesen Fehler Vorzeitiges Ende der Datei?
Es funktioniert, wenn ich die URL direkt übergeben:
- builder.parse ("");
aber schlägt fehl, wenn ich einen Inputstream übergeben:
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); }
Die Fehler Ich erhalte:
[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)
Haben Sie die zu analysierende XML-Datei? Vorzeitiges Ende der Datei zeigt an, dass Ihre XML-Datei nicht vollständig war. Da Sie hier eine URL-Verbindung verwenden, vermute ich Netzwerkprobleme. Der beste Weg, um dieses Problem zu lösen, ist, diese XML-Datei mit Hilfe von Wireshark oder TCP-Monitor Art von Tools zu erfassen und dann zu überprüfen, ob es abgeschlossen ist – NiranjanBhat
@NiranjanBhat. Ja, das XMl ist vollständig und gültig. Ich habe dieses XML mit einem direkten Link analysiert. Es scheint, der Fehler tritt nur auf, wenn ein InputStream verwendet wird. – Fabii
Warum machen Sie einen POST, aber senden keine Daten? – EJP