【问题标题】:"Premature end of file" while parsing xml from the net从网络解析 xml 时出现“文件过早结束”
【发布时间】:2012-04-28 01:47:35
【问题描述】:

当我尝试以这种方式从网上解析 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 的方式有什么问题?

【问题讨论】:

  • 您的复制代码不等价。您正在将 xml 字节转换为可能会更改数据的文本。为了进行直接比较,请将 xml 文件以字节的形式下载,并将 tmep 文件以字节的形式写入(例如,仅 InputStream 和 OutputStream,没有 Readers 或 Writers)。
  • 你的第一个代码对我来说很好,没有 sax 解析异常。

标签: java xml-parsing sax


【解决方案1】:

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

URL url = new URL("http://www.nbp.pl/kursy/xml/a074z120416.xml");
URLConnection uc = url.openConnection();
saxParser.parse(uc.getInputStream(), handler);

我在这里看不到任何问题。也许当您第一次尝试时文件正在更改,并且不完整。

但现在我可以向您确认它有效。我试试看。

【讨论】:

  • 你是对的。这段代码也为我运行。抱歉让我分心了。
猜你喜欢
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 2012-06-25
  • 2017-04-20
  • 1970-01-01
  • 2010-10-17
  • 2011-12-20
  • 1970-01-01
相关资源
最近更新 更多