Erlang Mongooseim匹配子元素值
在xmpp数据包的message元素中有一个子元素Request。因此,我的数据包如下所示:Erlang Mongooseim匹配子元素值,erlang,ejabberd,mongoose-im,Erlang,Ejabberd,Mongoose Im,在xmpp数据包的message元素中有一个子元素Request。因此,我的数据包如下所示: <message to="b" from="a" type="chat"> <request xmlns="urn:client:send-ack"></request> </message> 我想匹配request元素中xmlns属性的值。所以我想做一些类似的事情 case xml:get_attr_s(<<"xmlns"&
<message to="b" from="a" type="chat">
<request xmlns="urn:client:send-ack"></request>
</message>
我想匹配request元素中xmlns属性的值。所以我想做一些类似的事情
case xml:get_attr_s(<<"xmlns">>, xml_get_subtag(<<Request>>,Packet)) of
"urn:client:send-receipts" ->
%% Do something
ok.
case xml:get_attr_s(,xml_get_subtag(,Packet))的
“urn:客户端:发送收据”->
%%做点什么
好啊
但是,显然这是最密集的工作。最好的方法是什么?获取此属性的简单而快速的方法是
exml\u query:path/2
。有了它,您的案例。。。其中的
将如下所示:
case exml_query:path(Stanza, [{element, <<"request">>}, {attr, <<"xmlns">>}]) of
<<"urn:client:send-receipts">> -> something;
_ -> something_else
end
xml:get_subtags_with_xmlns(Parsed_xml, <<"request">>, <<"urn:client:send-ack">>).
case-exml_查询:的路径(节,[{element,},{attr,}])
->某物;
_->还有别的吗
结束
获取此属性的简单快捷方法是exml\u query:path/2
。有了它,您的案例。。。其中的
将如下所示:
case exml_query:path(Stanza, [{element, <<"request">>}, {attr, <<"xmlns">>}]) of
<<"urn:client:send-receipts">> -> something;
_ -> something_else
end
xml:get_subtags_with_xmlns(Parsed_xml, <<"request">>, <<"urn:client:send-ack">>).
case-exml_查询:的路径(节,[{element,},{attr,}])
->某物;
_->还有别的吗
结束
获取此属性的简单快捷方法是exml\u query:path/2
。有了它,您的案例。。。其中的
将如下所示:
case exml_query:path(Stanza, [{element, <<"request">>}, {attr, <<"xmlns">>}]) of
<<"urn:client:send-receipts">> -> something;
_ -> something_else
end
xml:get_subtags_with_xmlns(Parsed_xml, <<"request">>, <<"urn:client:send-ack">>).
case-exml_查询:的路径(节,[{element,},{attr,}])
->某物;
_->还有别的吗
结束
获取此属性的简单快捷方法是exml\u query:path/2
。有了它,您的案例。。。其中的
将如下所示:
case exml_query:path(Stanza, [{element, <<"request">>}, {attr, <<"xmlns">>}]) of
<<"urn:client:send-receipts">> -> something;
_ -> something_else
end
xml:get_subtags_with_xmlns(Parsed_xml, <<"request">>, <<"urn:client:send-ack">>).
case-exml_查询:的路径(节,[{element,},{attr,}])
->某物;
_->还有别的吗
结束
使用最新的ejabberd开发版本,您可以通过以下操作执行您想要的操作:
case exml_query:path(Stanza, [{element, <<"request">>}, {attr, <<"xmlns">>}]) of
<<"urn:client:send-receipts">> -> something;
_ -> something_else
end
xml:get_subtags_with_xmlns(Parsed_xml, <<"request">>, <<"urn:client:send-ack">>).
xml:使用xmlns(已解析的xml,)获取子标签。
它将匹配任意数量的子标签并返回一个列表
您需要从源代码处构建ejabberd,或使用月底之前发布的即将发布的ejabberd 15.04版本。对于最新的ejabberd开发版本,您可以通过以下操作执行您想要的操作:
case exml_query:path(Stanza, [{element, <<"request">>}, {attr, <<"xmlns">>}]) of
<<"urn:client:send-receipts">> -> something;
_ -> something_else
end
xml:get_subtags_with_xmlns(Parsed_xml, <<"request">>, <<"urn:client:send-ack">>).
xml:使用xmlns(已解析的xml,)获取子标签。
它将匹配任意数量的子标签并返回一个列表
您需要从源代码处构建ejabberd,或使用月底之前发布的即将发布的ejabberd 15.04版本。对于最新的ejabberd开发版本,您可以通过以下操作执行您想要的操作:
case exml_query:path(Stanza, [{element, <<"request">>}, {attr, <<"xmlns">>}]) of
<<"urn:client:send-receipts">> -> something;
_ -> something_else
end
xml:get_subtags_with_xmlns(Parsed_xml, <<"request">>, <<"urn:client:send-ack">>).
xml:使用xmlns(已解析的xml,)获取子标签。
它将匹配任意数量的子标签并返回一个列表
您需要从源代码处构建ejabberd,或使用月底之前发布的即将发布的ejabberd 15.04版本。对于最新的ejabberd开发版本,您可以通过以下操作执行您想要的操作:
case exml_query:path(Stanza, [{element, <<"request">>}, {attr, <<"xmlns">>}]) of
<<"urn:client:send-receipts">> -> something;
_ -> something_else
end
xml:get_subtags_with_xmlns(Parsed_xml, <<"request">>, <<"urn:client:send-ack">>).
xml:使用xmlns(已解析的xml,)获取子标签。
它将匹配任意数量的子标签并返回一个列表
您需要从源代码构建ejabberd,或者使用月底之前发布的即将发布的ejabberd 15.04版本。如果您真的想使用
xml
模块,那么xml:get\u tag\u attr(,xml:get\u subtag(El,)
是一个不错的选择,但是(可以说)exml\u query:path/2
,Piotr建议,有一个更方便的界面。如果你真的想使用xml
模块,那么xml:get\u tag\u attr(,xml:get\u subtag(El,)
是一个好办法,但是(可以说)Piotr建议的exml\u query:path/2
有一个更方便的界面。如果你真的想使用xml
模块,那么xml:get\u tag\u attr(,xml:get_subtag(El,)
是一种方法,但是(可以说)Piotr建议的exml\u query:path/2
有一个更方便的界面。如果你真的想使用xml
模块,那么xml:get_tag\u attr(,xml:get_subtag(El,)
是一种方法,但是(可以说)exml\u query:path/2
,由Piotr建议,有一个更方便的界面。嘿,谢谢它工作了。但是我有一个小问题。我的数据包中有两个请求标记。我要找的是第二个。但是每当我使用exml\u query:path查找匹配项时,它都会返回第一个匹配项。有没有办法循环遍历数据包或检查t下一个匹配还是什么?在这种情况下,使用具有相同参数的exml\u query:path/2
,它将返回一个结果列表,在这种情况下,两个元素的xmlns
值列表。然后,您可以使用list:member/2
检查所需的xmlns是否存在。嘿,谢谢,它起作用了。但我有一个小问题。我有我的数据包中有两个请求标记。我要查找的是第二个。但是,每当我使用exml\u查询:path查找匹配项时,它都会返回第一个匹配项。是否有方法循环遍历数据包或检查下一个匹配项或其他内容?在这种情况下,使用具有相同参数的exml\u查询:path/2
,它将返回一个结果列表,以本例显示两个元素的xmlns
值列表。然后您可以使用lists:member/2
检查所需的xmlns是否存在。嘿,谢谢,它起作用了。但我有一个小问题。我的数据包中有两个请求标记。我要查找的是第二个。但每当我使用exml\u query:path查找匹配项时,它都会返回e第一个匹配。是否有方法循环遍历数据包或检查下一个匹配或其他内容?在这种情况下,使用具有相同参数的exml\u query:path/2
,它将返回一个结果列表,在这种情况下,两个元素的xmlns
值列表。然后,您可以使用list:member/2
检查所需的XMLNS在那里。嘿,谢谢。它起作用了。但我有一个小问题。我的数据包中有两个请求标记。我要找的是第二个。但是,每当我使用exml_查询:路径查找匹配项时,它都会返回第一个匹配项。有没有办法在数据包中循环或检查下一个匹配项或其他内容?在这种情况下,请使用exml_查询:路径/2
使用相同的参数,它将返回一个结果列表,在本例中是两个元素的xmlns
值列表。然后可以使用lists:member/2
检查所需的xmlns是否