操作 XML 元素以从 Erlang 中的子元素获取值

Manipulating XML element to get value from Sub-element in Erlang

我在 Packet 中有这个:

{xmlelement,"message",
  [{"from", "ddfadfdf.com@54.69.16.10/26526129921433241378891365"},
   {"to", "afdafdfaf.com@54.69.16.10/30014432481433242528199830"}],
    [{xmlelement,"received",
       [{"xmlns",
        "urn:xmpp:receipts"},
        {"id", "018A12FB-0718-4304-87FD-430C59EDB4F9"}],
   []}]}

我只需要获取 received XML 元素下的 id 属性的值。

您可以使用函数 xml:get_path_s,要求它下降到名为 received 的元素中以获得名为 id 的属性:

> xml:get_path_s(Packet, [{elem, "received"}, {attr, "id"}]).
"018A12FB-0718-4304-87FD-430C59EDB4F9"

请注意,问题和上述解决方案适用于旧版本的 ejabberd,即 2.1.x。您可以分辨出不同之处,因为旧版本在问题中使用 xmlelement 记录,而新版本则使用 xmlel 记录。

对于较新的 ejabberd 版本,xml 模块已被 fxml 取代。函数名称相同,只是更改模块名称:

fxml:get_path_s(Packet, [{elem, "received"}, {attr, "id"}]).