2010-07-03 1 views
4

При вызове функции clojure.xml/parse с URI Clojure выполняет запрос HTTP GET для извлечения данных. Однако запрос HTTP содержит следующие заголовки: принятьПринять заголовки clojure.xml/разбор вызова

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

Не должно ли это быть application/xml?

+3

Это звучит как отчет об ошибке, поэтому я думаю, что вы должны направить этот вопрос группе Google Clojure. Также обратите внимание, что 'clojure.xml' имеет другие недостатки, чье исправление, вероятно, не будет приоритизировано в это время; таким образом, 'clojure.contrib.lazy-xml', вероятно, лучший выбор. (Не уверен, что он свободен от конкретной проблемы, которую вы описываете, поэтому не отправляйте это как ответ.) –

+0

Хорошо, я разместил его в группе Google. – StackedCrooked

ответ

1

Вызов clojure.xml/parse с String параметра (URI) похож на этот Java код:

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

Clojure не выполняет запрос HTTP GET. Он просто использует анализатор SAX в качестве парсера по умолчанию. Парсер Sax внутренне создает экземпляр XMLInputSource и передает его полностью до XMLEntityManager. Класс XMLEntityManager делает всю работу, связанную с открытием соединения и получить ваш XML (или больше как HTML) документ:

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

Если XmlInputSource является экземпляром HTTPInputSource, то XMLEntityManager устанавливает свойство запроса HTTP. Однако аналогичная функциональность для XMLInputSource (это то, что у нас есть в случае SAXParser).

Я думаю, что вы можете помочь вам сменить парсер SAX на некоторые другие реализации.

Смежные вопросы