2013-01-02 76 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會讓你的生活更輕鬆。