Java &引用;“文件过早结束”;在从网络解析xml时

Java &引用;“文件过早结束”;在从网络解析xml时,java,xml-parsing,sax,Java,Xml Parsing,Sax,当我尝试以这种方式从网络解析XML文件时: URL url = new URL("http://www.nbp.pl/kursy/xml/a074z120416.xml"); URLConnection uc = url.openConnection(); saxParser.parse(uc.getInputStream(), handler); 正在引发文件过早结束异常 堆栈跟踪: org.xml.sax.SAXParseException: Premature end of file.

当我尝试以这种方式从网络解析XML文件时:

URL url = new URL("http://www.nbp.pl/kursy/xml/a074z120416.xml");
URLConnection uc = url.openConnection();
saxParser.parse(uc.getInputStream(), handler);
正在引发文件过早结束异常

堆栈跟踪:

org.xml.sax.SAXParseException: Premature end of file.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at com.pmajcher.xmltest.ReadXMLFile.main(ReadXMLFile.java:142)
但当我第一次将xml保存到本地文件,然后尝试解析它时,一切都正常

URL url = new URL("http://www.nbp.pl/kursy/xml/a074z120416.xml");
URLConnection uc = url.openConnection();
InputStreamReader input = new InputStreamReader(uc.getInputStream());
BufferedReader in = new BufferedReader(input);
File file = new File("temp.xml");

if(!file.exists()){
    file.createNewFile();
}

PrintWriter out = new PrintWriter(file);
String inputLine;

while ((inputLine = in.readLine()) != null) {
    out.print(inputLine);
}
out.close();
saxParser.parse("temp.xml", handler);

我尝试从网络解析xml的方式有什么问题吗?

您在问题中编写的代码运行良好

URL url = new URL("http://www.nbp.pl/kursy/xml/a074z120416.xml");
URLConnection uc = url.openConnection();
saxParser.parse(uc.getInputStream(), handler);
我看不出有什么问题。也许当您第一次尝试时,文件正在更改,但尚未完成


但现在我可以向你证实它是有效的。我试过了。

发现重复您的副本代码不相同。您正在将xml字节转换为文本,这可能会更改数据。为了进行直接比较,下载xml文件作为字节,并将其作为字节写入tmep文件(例如,仅InputStream和OutputStream,没有读取器或写入器)。您的第一个代码对我来说很好,没有sax解析异常。您是对的。这段代码也为我运行。对不起,我分心了。