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, выпущенную до конца месяца.