Erlang 使用exmpp函数时函数子句错误

Erlang 使用exmpp函数时函数子句错误,erlang,ejabberd,exmpp,Erlang,Ejabberd,Exmpp,之前,我在ejabberd 2.1.10中为调试行使用了xml:get_tag_attr_s(“type”,Packet),但在ejabberd 13.03中这已经不起作用了。可能是因为根据docs(),它已被弃用,所以我尝试使用exmpp库中的函数 我在第二个调试行遇到错误(第一个调试行工作正常)。如何从属性中获取值 代码摘录: on_user_send_packet(From, To, Packet) -> ?DEBUG("Sent packet (1): ~p", [Packe

之前,我在ejabberd 2.1.10中为调试行使用了xml:get_tag_attr_s(“type”,Packet),但在ejabberd 13.03中这已经不起作用了。可能是因为根据docs(),它已被弃用,所以我尝试使用exmpp库中的函数

我在第二个调试行遇到错误(第一个调试行工作正常)。如何从属性中获取值

代码摘录:

 on_user_send_packet(From, To, Packet) ->
  ?DEBUG("Sent packet (1): ~p", [Packet]),
  Type = exmpp_xml:get_attribute(Packet, <<"type">>, <<"unknown">>),
  ?DEBUG("Sent packet from (2): ~p", [From]),
on\u user\u send\u数据包(从、到、数据包)->
?调试(“发送的数据包(1):~p,[packet]),
Type=exmpp\u xml:get\u属性(数据包,),
?调试(“从(2)发送的数据包):~p,[from]),
日志:

=信息报告===2013-05-2509:58:50===
D(:mod_stanza_ack:59):发送的数据包(1):{xmlel,,
[{,
},
{,
},
{,},
{,}],
[{xmlel,,[],
[{xmlcata,
}]},
{xmllel,,
[{,
}],
[]}]}
错误报告2013-05-2509:58:50===
E(:ejabberd_hooks:315):{function_子句,
[{exmpp_xml,get_属性,
[{xmllel,,
[{,
},
{,
},
{,},
{,}],
[{xmlel,,[],
[{xmlcata,}]},
{xmllel,,
[{,
}],
[]}]},
,],
[{file,“./core/exmpp_xml.erl”},
{line,1173}]},
{mod_stanza_ack,on_user_send_数据包,3,
[{file,“mod_stanza_ack.erl”},{line,60}]},
{ejabberd_hooks,run1,3,
[{文件,“ejabberd_hooks.erl”},
{line,311}]},
{ejabberd_c2s,session_成立2,2,
[{file,“ejabberd_c2s.erl”},{line,1136}]},
{p1_fsm,handle_msg,10,
[{file,“p1_fsm.erl”},{line,578}]},
{proc_lib,init_p_do_apply,3,
[{file,“proc_lib.erl”},{line,239}]}

传递给
exmpp\u xml:get\u attribute
数据包是一个
xmlel
记录,包含三个字段:元素名称、属性和子元素。但是,exmpp用五个元素()定义了
xmlel
记录:


我快速查看了ejabberd 13.03源代码,它看起来应该可以正常工作,所以我怀疑ejabberd 13.03与exmpp不兼容。(虽然我最近没有密切关注ejabberd的发展,因此希望能对此有更多的了解。)我想你最好还是试着找出为什么你会被打断。

Pre-ejabberd 13.XX

xml:get_tag_attr_s("type", Packet)
xml:get_tag_attr_s(<<"type">>, Packet) 
后ejabberd 13.XX

xml:get_tag_attr_s("type", Packet)
xml:get_tag_attr_s(<<"type">>, Packet) 
xml:get\u tag\u attr\s(,数据包)

在ejabberd 16.04上应该是


fxml:获取标签属性(,数据包)

你说得对。xml:get_tag_attr_s(“type”,Packet)现在应该是xml:get_tag_attr_s(,Packet),以便为ejabberd 13.XX工作