Leopard: Erfahrungen mit NSXMLParser?

  • Leopard: Erfahrungen mit NSXMLParser?

    Hallo zusammen,

    ich wollte gerade mal "schnell" ein kleines Bsp. für den NSXMLParser fertig machen.

    Ich kann dem Parser aber alle möglichen xml Dokumente geben, er spuckt immer nen Error.


    Quellcode

    1. //
    2. // Controller.m
    3. // XMLExample
    4. //
    5. // Created by xxxxxxxxxxxxx on 20.11.07.
    6. // Copyright 2007 __MyCompanyName__. All rights reserved.
    7. //
    8. #import "Controller.h"
    9. @implementation Controller
    10. - (void) awakeFromNib
    11. {
    12. NSLog (@"Awake");
    13. NSString *path = [[NSBundle mainBundle] pathForResource: @"xml" ofType: @"xml"];
    14. NSString *payload = [NSString stringWithContentsOfFile: path];
    15. NSLog(payload);
    16. NSURL *url = [NSURL URLWithString: path];
    17. _WLParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
    18. if ( _WLParser == nil )
    19. {
    20. NSLog( @"Fuck!!!!"); return;
    21. }
    22. [_WLParser setDelegate: self];
    23. [_WLParser parse];
    24. }
    25. @end
    26. @implementation Controller (ParserDelegates)
    27. - (void)parserDidStartDocument:(NSXMLParser *)parser
    28. {
    29. NSLog (@"Start");
    30. }
    31. - (void)parserDidEndDocument:(NSXMLParser *)parser
    32. {
    33. NSLog( @"End");
    34. }
    35. - (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock
    36. {
    37. NSLog( @"FoundData");
    38. }
    39. - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
    40. {
    41. NSLog( @"FoundElement %@" , elementName);
    42. }
    43. - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
    44. {
    45. NSLog( @"EndOfElement %@" , elementName);
    46. }
    47. - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    48. {
    49. NSLog( @"FoundCharacters %@" , string);
    50. }
    51. - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
    52. {
    53. NSLog( @"Error %@ %i" , parseError , [parser lineNumber]);
    54. }
    55. - (void)parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validError
    56. {
    57. NSLog( @"Error %@" , validError);
    58. }
    59. @end
    Alles anzeigen
    Also eigentlich noch nichts kompliziertes

    Quellcode

    1. 2007-11-20 16:05:53.712 XMLExample[2674:10b] Error Error Domain=NSXMLParserErrorDomain Code=5 "Operation could not be completed. (NSXMLParserErrorDomain error 5.)" 1
    2. 2007-11-20 16:05:53.712 XMLExample[2674:10b] End
    aber er steigt immer in Zeile 1 aus.

    Ich glaub so langsam, daß das nicht an mir liegt.

    Gruß Manfred
    Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.
  • RE: Leopard: Erfahrungen mit NSXMLParser?

    Ich weiss jetzt nicht, ob NSXMLParser in Leopard überarbeitet wurde, aber generell würde ich eher von NSXMLParser abraten.

    Verwende lieber gleich CFXMLParser wenn Du kein Risiko eingehen möchtest. Der funktioniert auch, wenn NSXMLParser ein Dokument mal wieder nicht richtig parsen möchte.

    Weitere Infos und Kommentare zu NSXMLParser gibt es über die Suche im Forum.
  • Original von spekul
    hey, das kommt genau richtig. ich benutze im moment NSXMLParser, um Szenedaten aus X3D dateien fuer eine gl engine zu laden. danke fuer die erleuchtungen :)

    Sag mal wie ist den die Performance beim parsen von größeren X3D-Files ?
  • das kann ich dir erst sagen, wenns wirklich dick wird. im moment maximal 100 transforms, die hauptarbeit liegt ja eher da drin, das is nen schoenen baum zu basteln, aus dem man die displaylisten und materialdefinitionen generieren kann.. kann mich dazu aber nochmal melden deswegen.
  • Ganz übles Zeug! GANZ übles Zeug!

    Mhh, diese Gerüchte hab ich von NSXMLDocument gehört, da sollen bei größeren Dateien auch mal Teile fehlen.

    Weitere Infos und Kommentare zu NSXMLParser gibt es über die Suche im Forum.
    Zumeist below der auf den üblen Charakter von NSXMLParser verweist ;)

    Ich hatte mit dem noch nie Probleme und ein Eventgesteuerter Parser ist einfach vorteilhaft, wenn es darum geht aus einem XML File bestimmte Objekte zu initialisieren.

    Verwende lieber gleich CFXMLParser wenn Du kein Risiko eingehen möchtest.

    Damit kann ich gut leben
    Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.
  • Original von kressevadder
    Ganz übles Zeug! GANZ übles Zeug!

    Mhh, diese Gerüchte hab ich von NSXMLDocument gehört, da sollen bei größeren Dateien auch mal Teile fehlen.

    Weitere Infos und Kommentare zu NSXMLParser gibt es über die Suche im Forum.
    Zumeist below der auf den üblen Charakter von NSXMLParser verweist ;)

    Ich hatte mit dem noch nie Probleme und ein Eventgesteuerter Parser ist einfach vorteilhaft, wenn es darum geht aus einem XML File bestimmte Objekte zu initialisieren.

    Verwende lieber gleich CFXMLParser wenn Du kein Risiko eingehen möchtest.

    Damit kann ich gut leben


    Hallo, ich hänge mich mal ran. Ich möchte auch gern leichtgewichtig und eventbasiert parsen (lassen). Kennt jemand einen smarten Trick, wie man die delegate-Methoden von NSXMLParser dazu überredet, mit XML umzugehen, bei dem sich Tags auf unterschiedlichen Ebenen den Namen teilen???
  • Hallo planetexpress69,

    Du musst Dir dazu einen Stack mit den Tags beim durchlaufen des XML-Dokuments aufbauen. Der Stack braucht Funktionen, um Tags zu pushen und zu poppen. Danach kannst Du über den Stackaufbau schließen, wo Du dich gerade befindest und entsprechend reagieren.

    Gruß,

    Frank
  • Soweit ich mich erinnere hatte Alex ein ganz bestimmtes Problem mit dem XML-Parser (IIRC mit Whitespaces), welches sich dann aber klärte. Das Verhalten war an der Stelle etwas anders, als er es erwartet hatte un dies ließ sich dann auch so handhaben wie er es wollte.

    Ist aber alles aus der Erinnerung.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?