2012-09-17 4 views
0

이것은 XML 파서로 보낼 수 있도록 받기를 원하는 XMPP 서버 측에서 보낸 XML입니다.안드로이드 용 asmack XMPP 라이브러리를 사용할 때 메시지에서 사용자 정의 속성을 읽을 수 없습니까?

<message to="[email protected]/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="[email protected]/39"> 
     <body>Hello</body> 
     <x xmlns="http://jabber.org/protocol/muc#user"> 
     <status xmlns="" code="0"/> 
     </x></message> 

이것은 수신하는 샘플 XML입니다. 내가 p.toXML()을 사용할 때; // 패킷 p

<message to="[email protected]/Smack" 
    from="[email protected]/Visitor1171" type="groupchat"> 
    <body>Hello</body> 
    <delay xmlns="urn:xmpp:delay"></delay> 
    <x xmlns="jabber:x:delay" stamp="20120917T05:57:19" 
    from="[email protected]/4732abb5"> 
    </x></message> 

방금 ​​XMPP 서버를 사용하기 시작했습니다. 따라서 어떤 지침도 감사 할 것입니다.

+0

XMPP 최상위 요소에 대한 고유 한 속성을 만들어서는 안됩니다. [XEP-134 2.1] (http://xmpp.org/extensions/xep-0134.html#xmpp)도 참조하십시오. 대신에 다음과 같은 확장자를 추가하십시오. / ' – Flow

답변

-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));     
     } 
     (...) 
    } 
} 

당신은 콩 클래스의 값을 설정 한 후 모든 경우에 대해 시작 태그를 추가하고하여 attribues를 읽을 수 있습니다.

+0

이 Bean 클래스는 어디에 있습니까. 나는 Asmack Source Code의 패키지를 의미합니까? –

+0

@SherazKhilji 그래서 나를 데칼 케어에 데려가세요. –

+0

예. 나는 XMPP에 익숙하다. 그러니 –

4

Smack (따라서 aSmack)에서는 소스 코드를 수정하지 않으면이 작업을 수행 할 수 없습니다. 표준 Message Stanza 만 구문 분석하므로 모든 사용자 정의 속성은 무시됩니다. XMPP의 올바른 접근법은 표준 패킷을 수정하지 않고 표준 패킷의 확장을 만드는 것입니다. 서버에서 전송되는 내용을 제어 할 수있는 경우에, 당신은 따라서이

<message to="[email protected]/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="[email protected]/39"> 
    <body>Hello</body> 
    <x xmlns="http://jabber.org/protocol/muc#user"> 
     <status xmlns="" code="0"/> 
    </x> 
</message> 

<message to="[email protected]/smack" chat_id="73392" xml:lang="en-us" 
type="groupchat" from="[email protected]/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"); 

을 당신은을 확인할 수 있습니다 호출하여 (파서 만든) 사용자 정의 개체를 검색은 매우 쉽게 공급자를 작성합니다.

+0

Robin이 여기에 있습니다. 당신은 잘못된 질문을하고 있습니다. 그러나 사용하는 네임 스페이스 URI에주의하십시오. "my :"는 사용자가 제어하는 ​​등록 된 URI 접두사가 아닙니다. 표준을 수행하지 않을 경우, 제어하는 ​​http : // URL을 고유 한 것으로 보장되는 URI로 사용할 수 있습니다. –

+0

답장을 보내 주셔서 감사합니다. 그래서 나는 이것을 위해 서버 측 코드를 수정해야한다. Message Stanza에서 속성을 추출 할 수있는 방법은 없습니다. –

+0

소스 코드를 수정하여이 문제를 해결했습니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 여기 링크가 있습니다. http://stackoverflow.com/questions/12475122/adding-custom-attributes-in-message-tag-in-xmpp-packet-using-asmack-for-android –