操作 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"}]).
我在 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"}]).