我试图解析一个XML响应
,但我失败得很惨。我最初认为xml
只是没有在响应中返回,因此我通过直接链接到我的xml
在线文件,精心编制了下面的代码。我能够毫无问题地将XML
打印到屏幕上。然而,当我调用我的解析方法时,我得到了文件的过早结束。
如果我直接传递URL,它会起作用:
但当我传递InputStream时失败:
>
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)
对于那些到达此职位寻求答案的人:
发生这种情况主要是因为DOM解析器正在使用的InputStream
是空的
所以在我遇到的情况中,可能有两种情况:
InputStream
已被使用,因此被清空
文件
或创建InputStream
的任何内容可能是空文件或字符串或其他内容。空虚可能是造成问题的原因。所以您需要检查InputStream
的源代码
您会得到错误,因为SAXBuilder不够智能,无法处理“空白状态”。所以它至少寻找一个
当你这样做的时候,
while((inputLine = buff_read.readLine())!= null){
System.out.println(inputLine);
}
你消耗了流内的一切,所以流内是空的。现在,当我们尝试这样做时,
Document doc = builder.parse(instream);
解析将失败,因为您向它传递了一个空流。
问题内容: 我在代码的第34行上不断收到LineUnavailableException:https://www.refheap.com/21223 错误显示为。 我正在创建Sound类的多个实例(在我的refheap粘贴中实现)。似乎最初的实例没有问题。但是,当我开始使用相同的音频文件制作Sound对象的新实例时,便开始出现此错误。 知道如何解决吗? EIDT:我认为这个问题的 想法可能是我需要
问题内容: ABstractMethodError的可能原因是什么? 线程“ pool-1-thread-1”中的异常java.lang.AbstractMethodError: 问题答案: 简单的答案是这样的:一些代码试图调用一个声明的方法。抽象方法没有主体,无法执行。由于您提供的信息很少,因此我无法真正详细说明如何发生这种情况,因为编译器通常会遇到此问题- 如此处所述,这意味着该类必须在运行时
问题内容: 尝试在Java应用程序中实现简单的JDBC查询时遇到一些问题。 所以我有以下查询: 如果将其运行到 Oracle SQL Developer中, 它将运行良好,并获得2条记录。 因此,我必须将此查询实现到应用程序的DAO类中,在其中定义了以下方法: 问题是,当我尝试执行上述方法时,将引发以下 SQLException : 为什么?我认为这可能是SQL语法中的问题,但是我对此不太确定(因
问题内容: 为什么在代码的指定位置出现ConcurrentModificationException?我无法弄清楚自己在做什么错… 正在使用该方法在列表中找到分钟,将其删除并返回其值 问题答案: 一旦修改了从其获得的Collection,则不应认为Iterator可用。(对于java.util.concurrent。*集合类,放宽了此限制。) 您首先要获得一个Iterator ,然后进行修改。修改
很抱歉,我对Java知之甚少。我得到了这个代码来接管。基本上,我在 当我运行代码时。 下面是解析XML的块 这是Improts,不确定是否需要这样做 这是XML文件
问题内容: 我已经找到了这段代码,无法找出解决方法。在运行代码时,为什么不提示用户输入而不是Java确定没有输入?错误跟踪如下。 这是错误- 问题答案: 简单的答案是当您关闭扫描仪时- 基础输入流也会关闭:http : //docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#close() 要修复此问题,请在主菜单中创建一次: