0

我的 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.

但是,显然这是最密集的工作。最好的方法是什么?

4

2 回答 2

2

获取此属性的简单快捷方法是exml_query:path/2. 有了它,您case ... of将遵循:

case exml_query:path(Stanza, [{element, <<"request">>}, {attr, <<"xmlns">>}]) of
    <<"urn:client:send-receipts">> -> something;
    _ -> something_else
end
于 2015-04-14T07:19:29.127 回答
1

使用最新的 ejabberd 开发版本,您可以执行以下操作:

xml:get_subtags_with_xmlns(Parsed_xml, <<"request">>, <<"urn:client:send-ack">>).

它将匹配任意数量的子标签并返回一个列表。

您需要从源代码构建 ejabberd 或使用即将在月底之前发布的 ejabberd 15.04 版本。

于 2015-04-15T08:46:51.423 回答