url-retrieve-synchronously関数を使用していますが、応答を含むバッファーが返されます。応答の本文を取得し、それをxml-parse-regionに渡すことができる、ハッキーではない方法があるかどうか疑問に思っています。
xml-parse-from-url関数はありますか?url-retrieveからの応答を解析するにはどうすればよいですか?
Emacsで配布されているパッケージのいくつかがそれをどのように行うかを見ることができます。たとえば、、、lisp/net/newst-backend.el
およびlisp/net/soap-client.el
。
identica-mode.el(GNU GPLバージョン2でライセンスされている)には、url-retrieveを使用してxmlパーサーに渡し、解析された応答を返す関数があります。
(defun identica-get-response-body (&optional buffer)
"Extract HTTP response body from HTTP response, parse it as XML, and return a XML tree as list.
`buffer' may be a buffer or the name of an existing buffer.
If `buffer' is omitted, current-buffer is parsed.
Removed the call to `identica-clean-response-body'."
(or buffer
(setq buffer (current-buffer)))
(set-buffer buffer)
(set-buffer-multibyte t)
(let ((start (save-excursion
(goto-char (point-min))
(and (re-search-forward "<\?xml" (point-max) t)
(match-beginning 0)))))
;;(identica-clean-response-body) ; necessary for identica, cleaned up some weird characters
(and start
(xml-parse-region start (point-max)))))