2010-07-03 53 views
4

使用URI調用函數clojure.xml/parse時,Clojure執行HTTP GET請求來提取數據。然而,HTTP請求包含以下接受頭:接受clojure.xml /解析調用的標頭

text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 

不應該這是application/xml

+3

這聽起來像一個錯誤報告,所以我認爲你應該把這個問題指向Clojure的Google小組。還要注意'clojure.xml'還有其他的缺陷,這些缺陷在這個時候可能不會被優先考慮。因此'clojure.contrib.lazy-xml'可能是一個更好的選擇。 (不知道它是否解決了您所描述的特定問題,因此不會將其作爲答案發布。) – 2010-07-03 01:07:37

+0

好的,我已將它發佈到Google小組上。 – StackedCrooked 2010-07-03 01:25:57

回答

1

String參數(URI)調用clojure.xml/parse與此類似Java代碼:

SAXParserFactory.newInstance().newSAXParser().parse("<your_uri>", <instance of XMLHandler provided by Clojure>); 

Clojure中不執行HTTP GET請求。它只是使用SAX解析器作爲默認解析器。 Sax解析器在內部創建一個XMLInputSource的實例,並將其傳遞到XMLEntityManagerXMLEntityManager類做了所有相關的開放連接,讓你的XML(或更像HTML)的工作文件:

URL location = new URL(expandedSystemId); 
URLConnection connect = location.openConnection(); 
... skip ... 
stream = connect.getInputStream(); 

如果XmlInputSourceHTTPInputSource一個實例,然後XMLEntityManager設置HTTP請求屬性。但是,XMLInputSource沒有類似的功能(這是我們在SAXParser的情況下)。

我想你可能會幫助你將SAX解析器改爲其他實現。