0

これは、XML パーサーに送信できるように受信したい XMPP サーバー側から送信された 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サーバーを使い始めたばかりです。したがって、ガイダンスは高く評価されます。

4

2 に答える 2

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をチェックアウトして、プロバイダーを非常に簡単に作成できます。

于 2012-09-17T14:14:47.123 に答える
-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 クラスに値を設定することで、属性を読み取ることができます。

于 2012-09-17T06:40:41.237 に答える