Mongooseim соответствует значению подэлемента

У меня есть дочерний элемент под названием Запрос внутри моего элемента сообщения пакета xmpp. Поэтому мой пакет выглядит следующим образом:

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

Но, очевидно, это самая плотная работа. Какой лучший способ сделать это?

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

С последней версией разработки ejabberd вы можете делать то, что хотите, с помощью следующего:

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

Он будет соответствовать любому количеству вложенных тегов и вернет список.

Вам необходимо собрать ejabberd из исходного кода или использовать следующую версию ejabberd 15.04, выпущенную до конца месяца.

Другие вопросы по тегам