2015-10-27 29 views
1

我知道有幾個問題的SAXParser那裏,但我不能找到一個描述我的問題:的SAXParser拋出FileNotFoundException異常,儘管沒有給出一個文件來分析

我有一個字符串包含XML數據,和我我將它傳遞給一個ByteArrayInputStream:

public boolean parse(String message) { 
     ByteArrayInputStream bis = new ByteArrayInputStream(message.getBytes()); 

我呼籲它

saxparser.parse(bis, handler); //this row throws a FileNotFoundException 

解析方法儘管沒有提及任何文件,解析拋出一個FileNotFoundException。 奇怪的是,它試圖在我的工作區中找到一個不存在的文件名,後來我發現文件名是由雙引號括起來的字符串的一部分(參見下面,我們將其稱爲「theFile.extension」文件)

編輯:我想,也許我的XML錯誤地因爲某些原因寫:

<?xml version="1.0"?> 
<!DOCTYPE presence PUBLIC "Some-valid-stuff" "theFile.extension"> 

我應該從哪裏尋找在這種情況下的解決方案?

感謝

+1

DOCTYPE x PUBLIC「...」「location」試圖在你的(本地)「位置」找到一個文件。顯然你沒有它。 – laune

+1

SAX解析器試圖使用指定的文件來驗證xml。我現在不記得了,但有一種方法可以禁用驗證 –

回答

3

SAX解析器正試圖驗證使用指定的DTD文件的XML,這就是它試圖加載該文件的原因。

您可以禁用驗證如下。

saxParserFactory.setValidating(false) 
saxParserFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false) 
+0

這就像一個魅力。不幸的是,我不知道如何從API中弄清楚這一點。你認爲我錯過了什麼,或者只是需要那種經歷?非常感謝 –

+0

也許這兩個:)。這個異常說它正在尋找DOCTYPE中提到的文件,如果你知道該文件的目的,即驗證,那麼你可能會在解析器API中查找與驗證有關的方法。 –

相關問題