使用 Smack 库为 XMPP 解析 EventElement [英] Parsing EventElement for XMPP using Smack Library

查看:28
本文介绍了使用 Smack 库为 XMPP 解析 EventElement的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

任何人都可以帮助我了解如何解析此事件发布元素并获取以下数据包的消息对象.也许我的关键字/搜索词谷歌搜索不正确,但我在寻找有关此的文档或教程时找不到任何有用的东西.

Can anyone please help to show me on how to parse this Event pub element and get the Message object for the following Packet. Maybe my keyword/search term googling is not correct but I'm not able to find anything helpful while looking for the documentation or tutorial about this.

我已经阅读了有关 PacketParserUtils 和 XmlPullParser 的一些内容并尝试实现它,但我一直为空.

I have read something about PacketParserUtils and XmlPullParser and tried to implement it, I keep on getting null.

代码

EventElement event = groupMessage.getExtension("event", "http://jabber.org/protocol/pubsub#event");

try {
    XmlPullParser parser = PacketParserUtils.newXmppParser();

    Log.d(TAG, "processStanza event: "+ event.toXML().toString());
    parser.setInput(new StringReader(event.toXML().toString()));
    Item  items = (Item) parser.getProperty("items");

    Log.d(TAG, "processStanza: " + items);
} catch (XmlPullParserException e) {
    e.printStackTrace();
}


<message to='+60174443333@crystal.domain.com/Resource' from='9176d3d3-e893-4add-91a1-82b42338c223@group.crystal.domain.com'>
    <event xmlns='http://jabber.org/protocol/pubsub#event'>
        <items node='urn:xmpp:mucsub:nodes:messages'>
            <item id='17100773132085304799'>
                <message xmlns='jabber:client' lang='en' to='+60174443333@crystal.domain.com' from='9176d3d3-e893-4add-91a1-82b42338c223@group.crystal.domain.com/+60149711089@crystal.domain.com' type='groupchat' id='21D85845-8434-4E0B-BB0C-5768256C5B66'>
                    <body xmlns='jabber:client'>This is the message</body>
                </message>
            </item>
        </items>
    </event>
</message>

推荐答案

虽然晚了,但可能对新用户有所帮助.您可以将自定义 muc-sub xml 解析为:

Though its late, it may help new users. You can parse custom muc-sub xml as :

(在 Kotlin 中)

xmppTcpConnection.addAsyncStanzaListener(StanzaListener {
it?.let { stanza ->
  if (stanza is Message) {

    val eventElement: EventElement? = stanza.getExtension(

              "event",
              "http://jabber.org/protocol/pubsub#event") 

    if (eventElement != null) {

        val itemsExtension: ItemsExtension = eventElement .event as ItemsExtension 

        itemsExtension.items?.forEach { namedElement ->
             val payloadItem = namedElement as PayloadItem<*>

             val simplePayload: SimplePayload = payloadItem.payload as SimplePayload

             val parserString: String = simplePayload.toXML(null)

             val xmlPullParser: XmlPullParser = PacketParserUtils.getParserFor(parserString)

             val message: Message = PacketParserUtils.parseMessage(xmlPullParser)

             //Your code here
         }
       }
   }
 }
}, StanzaTypeFilter(Message::class.java))

在此处参考 Smack 讨论

这篇关于使用 Smack 库为 XMPP 解析 EventElement的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆