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

时间:2015-06-02 12:18:23

标签: xml erlang ejabberd

我在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"}],
   []}]}

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

1 个答案:

答案 0 :(得分:2)

您可以使用函数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"}]).