mongooseim匹配子元素值
Mongooseim match sub element value
我在 xmpp 数据包的消息元素中有一个名为 Request 的子元素。因此,我的数据包如下所示:
<message to="b" from="a" type="chat">
<request xmlns="urn:client:send-ack"></request>
</message>
我想匹配请求元素内的 xmlns 属性值。所以我想做一些像
case xml:get_attr_s(<<"xmlns">>, xml_get_subtag(<<Request>>,Packet)) of
"urn:client:send-receipts" ->
%% Do something
ok.
但是,显然这是最密集的工作。最好的方法是什么?
获取此属性的简便方法是 exml_query:path/2
。有了它,您的 case ... of
将如下:
case exml_query:path(Stanza, [{element, <<"request">>}, {attr, <<"xmlns">>}]) of
<<"urn:client:send-receipts">> -> something;
_ -> something_else
end
使用最新的 ejabberd 开发版本,您可以执行以下操作:
xml:get_subtags_with_xmlns(Parsed_xml, <<"request">>, <<"urn:client:send-ack">>).
它将匹配任意数量的子标签和return一个列表。
您需要从源代码构建 ejabberd 或使用月底前发布的即将发布的 ejabberd 15.04 版本。
我在 xmpp 数据包的消息元素中有一个名为 Request 的子元素。因此,我的数据包如下所示:
<message to="b" from="a" type="chat">
<request xmlns="urn:client:send-ack"></request>
</message>
我想匹配请求元素内的 xmlns 属性值。所以我想做一些像
case xml:get_attr_s(<<"xmlns">>, xml_get_subtag(<<Request>>,Packet)) of
"urn:client:send-receipts" ->
%% Do something
ok.
但是,显然这是最密集的工作。最好的方法是什么?
获取此属性的简便方法是 exml_query:path/2
。有了它,您的 case ... of
将如下:
case exml_query:path(Stanza, [{element, <<"request">>}, {attr, <<"xmlns">>}]) of
<<"urn:client:send-receipts">> -> something;
_ -> something_else
end
使用最新的 ejabberd 开发版本,您可以执行以下操作:
xml:get_subtags_with_xmlns(Parsed_xml, <<"request">>, <<"urn:client:send-ack">>).
它将匹配任意数量的子标签和return一个列表。
您需要从源代码构建 ejabberd 或使用月底前发布的即将发布的 ejabberd 15.04 版本。