0

我正在使用 url-retrieve-synchronously 函数,它返回一个包含响应的缓冲区。我想知道是否有一种非 hacky 的方式来获取响应的主体并能够将其传递给 xml-parse-region。

是否有 xml-parse-from-url 函数?如何解析来自 url-retrieve 的响应?

4

2 回答 2

0

在 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)))))
于 2012-11-12T19:17:11.697 回答
0

你可以看看随 Emacs 分发的一些包是如何做到的。例如lisp/net/newst-backend.el, 和lisp/net/soap-client.el

于 2012-11-12T04:02:57.163 回答