2013-01-02 98 views
-1

我创建了一个URL,它将触发我们的GSA返回XML回复。我仔细检查了网址生成工作。Java尝试解析XML流时出错

当我尝试使用下面的代码行解析流:

Document doc = (Document) db.parse(new URL(filePath).openStream()); 

在系统日志中我得到以下错误:

Error: URI=null Line=2: Document root element "GSP", must match DOCTYPE root "null" 
Error: URI=null Line=2: Document is invalid: no grammar found 

XML文件看起来是这样的(我已用xxx清空识别信息):

<GSP VER="3.2"> 
<TM>0.011504</TM> 
<Q>xxxxxxx</Q> 
<PARAM name="output" value="xml_no_dtd" original_value="xml_no_dtd"/> 
<PARAM name="q" value="xxxxxxx" original_value="xxxxxxx"/> 
<PARAM name="site" value="xxxxxxx" original_value="xxxxxxx"/> 
<PARAM name="btn" value="" original_value=""/> 
<PARAM name="ie" value="UTF-8" original_value="UTF-8"/> 
<PARAM name="ip" value="xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx" original_value="xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx"/> 
<PARAM name="access" value="p" original_value="p"/> 
<PARAM name="sort" value="date:D:L:d1" original_value="date:D:L:d1"/> 
</GSP> 

有没有人处理issu那么在此之前,可能能够提供一些指导措施?

+1

什么是数据库? xml文档的内容是什么?尝试将调用'openStream()'的结果赋值给一个变量并检查它是否为null。 (这是一个好主意,因此你可以在解析后关闭流) –

+0

我将把xml添加到主要问题 – Deslyxia

+0

db是我在这种情况下给我的DocumentBuilder – Deslyxia

回答

1

您的DocumentBuilder已启用验证,但您没有定义DTD(替代方法:您定义的DTD与实际内容不匹配)。

+0

的名称,如果我禁用验证,问题可能会消失? – Deslyxia

+0

你为什么不试试看?寻找对'setValidating(true)'的调用,并且删除它或传递'false'。 – parsifal

+0

因为要尝试一下,我必须将其推向生产。推动它到生产,我必须扫描代码。如果我扫描的代码,即时通讯不验证数据库我需要证明它。更有可能他们不会让我滑过“我认为这可能会奏效”;)我试图找到更具体的东西来告诉更高层的人,然后我禁用它。 – Deslyxia

1

我现在在工作,但我的建议是看看Jaxb。它有惊人的注释支持,经常用于处理xml的框架。

这是一个安全的赌注,Jaxb会让你的生活更轻松。