Search code examples
iosiphonexmppnsxmlelement

Retrieving value from NSXMLElement


I'm trying to retrieve "number" from the below mentioned code.

<iq from='[email protected]'
    id=‘XYZ'
    to='[email protected]/pda'
    type='result'>
  <query xmlns='urn:XYZ:number'>
    <number xmlns=‘urn:XYZ:number'>4</number>
  </query>
</iq>

I tried the following but it always updates as "0" but i can see iq has different number than 0

            NSXMLElement *query = [iq childElement];
            NSXMLElement *number = [query elementForName:@“number"];
            NSInteger number = [number attributeIntegerValueForName:@"number
"];

Solution

  • Try:

    NSXMLElement *number = [query elementForName:@"number" xmlns:@"urn:XYZ:number"];
    

    Namespaces matter. This uses the NSXMLElement category added by XMPPFramework. More details here.

    Your XML could also be simplified as such:

    <iq from='[email protected]'
        id=‘XYZ'
        to='[email protected]/pda'
        type='result'>
      <query xmlns='urn:XYZ:number'>
        <number>4</number>
      </query>
    </iq>
    

    The namespace on the query element applies to all child elements.