这是我想要接收的从XMPP服务器端发送的XML,以便我可以将它发送到我的XML解析器。
<message to="39@domainname.com/smack" chat_id="73392"
custom_packet="true" user_id="44" manager_id="39" time_stamp="0" website_id="0"
visitor_name="John" end_time="False" xml:lang="en-us" type="groupchat"
from="room73392@conference.domainname.com/39">
<body>Hello</body>
<x xmlns="http://jabber.org/protocol/muc#user">
<status xmlns="" code="0"/>
</x></message>
这是我收到的示例XML。 当我使用p.toXML(); //包p
<message to="44@domainname.com/Smack"
from="room73407@conference.domainname.com/Visitor1171" type="groupchat">
<body>Hello</body>
<delay xmlns="urn:xmpp:delay"></delay>
<x xmlns="jabber:x:delay" stamp="20120917T05:57:19"
from="4732abb5@domainname.com/4732abb5">
</x></message>
我刚刚开始使用XMPP服务器。所以任何指导都会受到赞赏。
答案 0 :(得分:4)
你不能在没有修改源代码的情况下在Smack(以及aSmack)中执行此操作。它只会解析标准的Message节,因此将忽略所有自定义属性。 XMPP中的正确方法是创建标准数据包的扩展,而不是修改它们。如果您可以控制从服务器发送的内容,那么您应该更改为消息添加自定义扩展的方法,从而更改此
<message to="39@domainname.com/smack" chat_id="73392"
custom_packet="true" user_id="44" manager_id="39" time_stamp="0"
website_id="0" visitor_name="John" end_time="False" xml:lang="en-us"
type="groupchat" from="room73392@conference.domainname.com/39">
<body>Hello</body>
<x xmlns="http://jabber.org/protocol/muc#user">
<status xmlns="" code="0"/>
</x>
</message>
到这个
<message to="39@domainname.com/smack" chat_id="73392" xml:lang="en-us"
type="groupchat" from="room73392@conference.domainname.com/39">
<body>Hello</body>
<x xmlns="http://jabber.org/protocol/muc#user">
<status xmlns="" code="0"/>
</x>
<custom xmlns="my:namespace:custom" user_id="44" manager_id="39" time_stamp="0"
website_id="0" visitor_name="John" end_time="False"/>
</message>
然后,您可以轻松编写自己的提供程序来解析自定义数据包扩展,并通过调用
简单地检索您的自定义对象(由解析器创建)MyExtension customStuff = message.getExtension("my:namespace:custom");
您可以查看EmbeddedExtensionProvider,轻松编写您的提供商。
答案 1 :(得分:-2)
do {
ParseEvent event=parser.read();
ParseEvent pe;
switch(event.getType()){
case Xml.START_TAG:
if (event.getName().toString().equals("message")){
int xx=event.getAttributeCount();
String _s2=event.getAttribute("to").getValue();
if(_s2=="" || _s2==null){
_s2="N/A";
}
String _s3=event.getAttribute("from").getValue();
if(_s3=="" || _s3==null){
_s3="N/A";
}
String _s4=event.getAttribute("type").getValue();
if(_s4=="" || _s4==null){
_s4="N/A";
}
String _s1=_s2+"~~"+_s3+"~~"+_s4;
m_result.add(new BeanClassName(_s1));
}
(...)
}
}
您可以通过为每个案例添加开始标记然后在bean类中设置值来读取属性。