使用android的asmack XMPP库时无法从消息标记读取自定义属性?
这是从XMPP服务器端发送的XML,我希望接收它,以便将其发送到XML解析器使用android的asmack XMPP库时无法从消息标记读取自定义属性?,android,xmpp,smack,xmppframework,asmack,Android,Xmpp,Smack,Xmppframework,Asmack,这是从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
<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服务器。因此,任何指导都将不胜感激
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));
}
(...)
}
}
您可以通过为每种情况添加start标记,然后在bean类中设置值来读取属性。如果不修改源代码,在Smack(以及aSmack)中就无法执行此操作。它将只解析一个标准的消息节,因此您的所有自定义属性都将被忽略。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>
您可以签出以非常轻松地编写提供者。这个bean类在哪里。我的意思是在哪一个Asmack源代码包中?@SherazKhilji需要我为uYes创建一个bean类。我是XMPP新手,所以请注意,如果上面的代码是用于编写XML解析器的,那么我希望接收自定义XML数据包。我已经有了一个XML解析器。请再次阅读此问题,但使用我上面编辑的代码,您可以在这里看到xmlRobin中属性的值。你问错问题了。但是,请注意您使用的名称空间URI;“my:”不是您控制的已注册URI前缀。如果您不打算执行标准,您控制的http://URL可以用作保证唯一的URI。谢谢您的回复。因此,我必须为此修改服务器端代码。我无法从消息节中提取属性。我通过修改源代码解决了这个问题。有关如何执行此操作的更多详细信息,请访问链接。永远不要为XMPP顶级元素发明自己的属性。另见。而是添加扩展名
/
<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");