2010-07-03 40 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解析器改为其他实现。