NSXMLParser Element aus XML auslesen

  • NSXMLParser Element aus XML auslesen

    Hi,

    ich programmiere gerade eine alte App neu unter iOS6 und möchte gerne auf die alten Frameworks etc. verzichten.
    Nun hab ich ein Problem mit dem XMLParser.
    Folgendes XML bekomme ich über einen NSUrlRequest.

    <?xml version="1.0"?><methodResponse><params><param><value><boolean>1</boolean></value></param></params></methodResponse>

    Nur wie komme ich jetzt mit dem NSXMLParser an die 1 die zwischen <boolean>1</boolean> steht?
    Die Einzelnen Elemente bekomme ich über :
    -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {}
    Nur die 1 wird mir nicht ausgegeben.

    Danke & Lg, Lena
  • Das liefert (null)... hm
    Hier mein Code:

    Quellcode

    1. -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    2. NSLog(@"didStartElement: %@", elementName);
    3. if (namespaceURI != nil)
    4. NSLog(@"namespace: %@", namespaceURI);
    5. if (qName != nil)
    6. NSLog(@"qualifiedName: %@", qName);
    7. NSLog(@"%@", [attributeDict valueForKey: @"boolean"]);
    8. }
    Alles anzeigen
  • chartus schrieb:

    versuchs mal damit:

    Quellcode

    1. - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

    Damit wird es gehen weil es die Zeichen zwischen einem <tag> und </tag> liefert.

    Aber Achtung: man muss schauen dass der Parser gerade im gewünschten Element drin ist.
    Und diese Methode kann mehrfach aufgerufen werden, da die Zeichen u.U. stückweise angeliefert werden.

    Also:
    1. bei didStartElement einen NSMutableString auf leer setzen.
    2. foundCharacters fügt die Zeichen an (appendString)
    3. bei didEndElement schauen welches Element das war und den NSString auswerten

    Noch wichtiger:
    0. Beispiele dazu finden (da gibt es hunderte, angefangen bei Apple).

    developer.apple.com/library/ma…doc/uid/20002265-BCIJFGJI

    Wie findet man z.B. dieses Beispiel?

    Apple Doku zu NSXMLParser öffnen, dort auf "Companion guide" clicken...
  • ich bekomme leider wenn ich den String ausgebe immer noch (null) zurück. Obwohl 1 bei ...foundCharakters da ist.

    Hier mein Code:

    Quellcode

    1. -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    2. NSLog(@"ATTR: %@", attributeDict);
    3. NSLog(@"didStartElement: %@", elementName);
    4. if (namespaceURI != nil)
    5. NSLog(@"namespace: %@", namespaceURI);
    6. if (qName != nil)
    7. NSLog(@"qualifiedName: %@", qName);
    8. if ( [elementName isEqualToString:@"boolean"] ) {
    9. [currentParsedCharacterData setString:@""];
    10. }
    11. }
    12. - (void) parser: (NSXMLParser*) parser foundCharacters: (NSString*) string
    13. {
    14. NSLog(@"parser: %@ foundCharacters: %@", parser, string);
    15. [self.currentParsedCharacterData appendString:string];
    16. }
    17. -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    18. if ( [elementName isEqualToString:@"boolean"] ) {
    19. NSLog(@"Teststr: %@",self.currentParsedCharacterData);
    20. }
    21. NSLog(@"didEndElement: %@", elementName);
    22. }
    Alles anzeigen


    Und hier was geloggt wird (bei Teststr sollte 1 stehen)

    Quellcode

    1. 2013-04-10 08:03:39.525 Keymatic[74146:c07] didStartDocument
    2. 2013-04-10 08:03:39.525 Keymatic[74146:c07] didStartElement: methodResponse
    3. 2013-04-10 08:03:39.525 Keymatic[74146:c07] didStartElement: params
    4. 2013-04-10 08:03:39.526 Keymatic[74146:c07] didStartElement: param
    5. 2013-04-10 08:03:39.526 Keymatic[74146:c07] parser: <NSXMLParser: 0x7123b80> foundCharacters:
    6. 2013-04-10 08:03:39.526 Keymatic[74146:c07] didStartElement: value
    7. 2013-04-10 08:03:39.526 Keymatic[74146:c07] didStartElement: boolean
    8. 2013-04-10 08:03:39.526 Keymatic[74146:c07] parser: <NSXMLParser: 0x7123b80> foundCharacters: 1
    9. 2013-04-10 08:03:39.526 Keymatic[74146:c07] Teststr: (null)
    10. 2013-04-10 08:03:39.526 Keymatic[74146:c07] didEndElement: boolean
    11. 2013-04-10 08:03:39.526 Keymatic[74146:c07] didEndElement: value
    12. 2013-04-10 08:03:39.527 Keymatic[74146:c07] parser: <NSXMLParser: 0x7123b80> foundCharacters:
    13. 2013-04-10 08:03:39.527 Keymatic[74146:c07] didEndElement: param
    14. 2013-04-10 08:03:39.527 Keymatic[74146:c07] didEndElement: params
    15. 2013-04-10 08:03:39.527 Keymatic[74146:c07] didEndElement: methodResponse
    16. 2013-04-10 08:03:39.530 Keymatic[74146:c07] didEndDocument
    17. 2013-04-10 08:03:39.530 Keymatic[74146:c07] OK
    Alles anzeigen