我正在使用 url-retrieve-synchronously 函数,它返回一个包含响应的缓冲区。我想知道是否有一种非 hacky 的方式来获取响应的主体并能够将其传递给 xml-parse-region。
是否有 xml-parse-from-url 函数?如何解析来自 url-retrieve 的响应?
在 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)))))
你可以看看随 Emacs 分发的一些包是如何做到的。例如lisp/net/newst-backend.el
, 和lisp/net/soap-client.el
。