title: Ejabberd Packet parsing using erlang
body: <p>Ejabberd server receives packet like this:</p>
  
  <pre><code>  {xmlel,&lt;&lt;"message"&gt;&gt;,[{&lt;&lt;"from"&gt;&gt;,&lt;&lt;"user1@localhost/resource"&gt;&gt;},{&lt;&lt;"to"&gt;&gt;,&lt;&lt;"user2@localhost"&gt;&gt;},{&lt;&lt;"xml:lang"&gt;&gt;,&lt;&lt;"en"&gt;&gt;},{&lt;&lt;"id"&gt;&gt;,&lt;&lt;"947yW-9"&gt;&gt;}],[{xmlcdata,&lt;&lt;"&gt;"&gt;&gt;},{xmlel,&lt;&lt;"body"&gt;&gt;,[],[{xmlcdata,&lt;&lt;"Helllo wassup!"&gt;&gt;}]}]}
  </code></pre>
  
  <p>I want to fetch data from this packet.
  Needed data : Type, If the body has a certain parameter, say <code>{&lt;&lt;"xml:lang"&gt;&gt;,&lt;&lt;"en"&gt;&gt;}</code>
  I am doing the following operations:</p>
  
  <pre><code>  {_XMLEL, TYPE, DETAILS , _BODY} = Packet
  </code></pre>
  
  <p>This provides me the type : <code>&lt;&lt;"message"&gt;&gt;</code> or <code>&lt;&lt;"iq"&gt;&gt;</code> or <code>&lt;&lt;"presence"&gt;&gt;</code>.</p>
  
  <p>To check if DETAILS has <code>{&lt;&lt;"xml:lang"&gt;&gt;,&lt;&lt;"en"&gt;&gt;}</code> I do this:</p>
  
  <pre><code> Has_Attribute=lists:member({&lt;&lt;"xml:lang"&gt;&gt;,&lt;&lt;"en"&gt;&gt;},DETAILS)
  </code></pre>
  
  <p>Is there any better way to do this?
  I also need the <code>to</code> and <code>from</code> attributes from the packet.</p>