java 解析xmpp消息_【XMPP】Smack源码之消息接收与解析

XmpPullParser鉴于xmpp协议都是以xml格式来传输,因此源码中解析协议都是用到XmpPullParser来解析xmlXmpPullParser很简单,先简单介绍几个比较常用的方法//定义一个事件采用回调方式,直到xml完毕public int getEventType() throwsXmlPullParserException ;//遍历下一个事件,返回一个事件类型public i...
摘要由CSDN通过智能技术生成

XmpPullParser

鉴于xmpp协议都是以xml格式来传输,因此源码中解析协议都是用到XmpPullParser来解析xml

XmpPullParser很简单,先简单介绍几个比较常用的方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//定义一个事件采用回调方式,直到xml完毕

public int getEventType() throwsXmlPullParserException ;//遍历下一个事件,返回一个事件类型

public int next() throwsXmlPullParserException, IOException//得到当前tag的名字

publicString getName();//获得当前文本

publicString getText();//当前tag下的属性数量

public intgetAttributeCount() ;//获得当前指定属性位置的名称

public String getAttributeName(intindex);//获得当前指定属性位置的值

public String getAttributeValue(int index);

View Code

为了更好的理解后面的源码,加一段代码来分析:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public PacketExtension parseExtension(XmlPullParser parser) throwsException {

MUCUser mucUser= newMUCUser();boolean done = false;while (!done) {int eventType =parser.next();if (eventType ==XmlPullParser.START_TAG) {if (parser.getName().equals("invite")) {

mucUser.setInvite(parseInvite(parser));

}if (parser.getName().equals("item")) {

mucUser.setItem(parseItem(parser));

}if (parser.getName().equals("password")) {

mucUser.setPassword(parser.nextText());

}if (parser.getName().equals("status")) {

mucUser.setStatus(new MUCUser.Status(parser.getAttributeValue("", "code")));

}if (parser.getName().equals("decline")) {

mucUser.setDecline(parseDecline(parser));

}if (parser.getName().equals("destroy")) {

mucUser.setDestroy(parseDestroy(parser));

}

}else if (eventType ==XmlPullParser.END_TAG) {if (parser.getName().equals("x")) {

done= true;

}

}

}returnmucUser;

}

View Code

里面的对象先不用理它,只需看他是如何分析这段xml的:

//协议解释,从123456789发送一段协议给12345678这个用户,邀请用户123456789进入房间,理由hi join us。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

hi join us

View Code

parser.next();

获得第一个事件,判断是否开始标签(XmlPullParser.START_TAG)

然后再里面判断每个标签的名字

处理完后判断结尾标签(XmlPullParser.END_TAG)是

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值