1

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

<iq from='coven@chat.shakespeare.lit'
    id=‘XYZ'
    to='hag66@shakespeare.lit/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
"];
DevCali
  • 398
  • 6
  • 20
  • I don't want to make any assumptions, but with the code you have provided, it looks like you are trying to directly access XML nodes from a string of XML. Has that XML already been parsed? – Paul Bonneville Jan 20 '14 at 21:01
  • yes, and i have values in query and number.. – DevCali Jan 20 '14 at 21:04
  • i just need to know, how to retrieve this number "4" in the above code... the above code NSXMLElement *number = [query elementForName:@“number"]; gives me 4 ... i need to know how to take out the number "4" from this element and save it in NSInteger – DevCali Jan 20 '14 at 21:06
  • Does this help: http://stackoverflow.com/questions/2962027/parsing-nsxmlnode-attributes-in-cocoa - In the first answer under the question it looks like they loop through the attributes of the element... – Paul Bonneville Jan 20 '14 at 21:41

1 Answers1

2

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='coven@chat.shakespeare.lit'
    id=‘XYZ'
    to='hag66@shakespeare.lit/pda'
    type='result'>
  <query xmlns='urn:XYZ:number'>
    <number>4</number>
  </query>
</iq>

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

Joe Hildebrand
  • 10,354
  • 2
  • 38
  • 48