XML parsen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hallo zusammmen,

    zu so fortgeschrittener Stunde habe ich noch eine Frage und danke mal vorab für eure geschätzte Hilfe!

    Seit einiger Zeit beschäftigen wir uns in diesem Semester mit dem XML-Format und wie wir es in C# (und auch bald für Java) für unsere Applikationen verarbeiten. Dabei ist der "Schwierigkeitsgrad" noch recht human. Wir lesen RSS-Feeds aus Nachrichtenwebsites aus oder gar Wikipedia-Artikel und filtern die für uns interessanten Inhalte. Grob gesagt kann ich in C# eine XML mit dem XmlReader durchlaufen und den Inhalt der Elemente unterscheiden und entsprechend reagieren. Das Ganze würde ich jetzt auch gern in Objective-C können und hab mir dazu mal Einiges aus dem Internet angeschaut in diversen Forumposts. Dort bin ich leider nicht allzu fündig geworden, drum hab ich mir die NSXMLParser - Klasse angeschaut und hab seitdem schon ein wenig mehr Durchblick. Was mir vielleicht ein bisschen fehlt, ist ein Einstieg in die Arbeit mit XML in ObjC.

    Mir würde es schon helfen wenn jemand den Code dafür postet. Möglicherweise genügt das nämlich schon, so dass ich mir für den Rest selbst Gedanken machen kann :)

    Um das Ganze einfach zu halten, genügt es mir auch schon, wenn gezeigt wird, wie ich die Daten aus einer Datei bekomme (und so aus dem String filtere).

    Einen schönen Abend und nochmals vielen Dank für jegliche Hilfe vorab,

    Marcus


    P.S.: Die SuFu hat hierzu zwar Ergebnisse gebracht, die mich allerdings nicht weitergebracht haben :(
  • hi

    hier ist ein codeschnipsel von mir der aus einer xml eine NSDirectory macht mit meheren dimensionen etc. [Code Schnipsel] NSXMLParser zu NSDictionary

    den parser erstellt man so NSXMLParser *pXML = [[NSXMLParser alloc] initWithData:receivedData];
    receivedData is NSData ... wenn du die daten schon als daten hast kannste das direkt da reinwerfen wenn du es als string hast erstelle die daten aus den string // [stringData dataUsingEncoding:NSASCIIStringEncoding]
    ein nsdata mit inhalt aus den internet (xml datei) kann so erstellen

    Quellcode

    1. NSData *xmlData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://examlpe.com/file.xml"]];


    sagt was der delegate ist (da wo sich die xmlPaser methoden befinden)
    [pXML setDelegate:self];

    startet das parsen und gibt den speicher frei
    [pXML parse];
    [pXML release];

    Quellcode

    1. // wird aufgerufen wenn der parser startet
    2. - (void)parserDidStartDocument:(NSXMLParser *)parser
    3. // wird aufgerufen wenn er ein anfang tag findet ([b]<tagA>[/b]data</tagA>)
    4. - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI
    5. qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
    6. //wird aufgerufen wenn daten zwischen ein tag gefunden wurden (<tagA>[b]data[/b]</tagA>)
    7. - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    8. // wird aufgerufen wenn irgendein endtag gefunden wird (<tagA>data[b]</tagA>[/b])
    9. - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
    10. // wird aufgerufen wenn alles durchgeparsed wurde
    11. - (void)parserDidEndDocument:(NSXMLParser *)parser
    Alles anzeigen


    dazu muss man sagen der parser arbeitet von oben nach unten. Am besten du erstellst dir eine testklasse lädst eine xml rein und guckst dir an was er findet (mach in jeder methode nslog ausgaben)
    hoffe das hilft dir weiter
    俺の世界にようこそ

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Plany ()

  • Zuerst einmal musst du dich entscheiden, ob du DOM- oder SAX-Parsing möchtest. Beim DOM-Style erhältst du fix und foxy ein Dokument. Auf dieses kannst du dann mit verschiedenen Methoden bis hin zum XPath zugreifen.

    Beim SAX-Style liefert dir der Parser über Delegatemehtoden (hier ist mutmaßlich die Schwierigkeit, da das Delegatekonzept von Objective-C/Cocoa Wechslern gerne unbekannt ist) verschiedene Elemente geliefert, die du selbst zu einem Dokument zusammenbauen musst. Bei iOS existiert nur diese Möglichkeit.
    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"?
  • @Plany:
    Danke nochmal für deinen Beitrag. Ich hab ihn mir heute nochmal zu Gemüte geführt und etwa das Gleiche herausgelesen wie auch schon in der Developer-Documentation. Leider haperts bei mir immernoch mit dem Verständis :( Ich glaube ich bin ein wenig verwöhnt was den einfachen Umgang mit XMLs in C# angeht 8|
    @Amin:
    Okay das hätte ich dazuschreiben sollen. Ich möchte gern SAX-Parsing. Das mit den Delegates ist wirklich das Verständnisproblem, das ist richtig, allerdings auch nur in diesem Fall! Generell komme ich mit Delegates gut klar und ich denke ich hab den Sinn und Zweck ganz gut verstanden. So hab ich auch schon gute Erfahrungen mit Delegate-Methoden für TabViews sowie TableViews gemacht.

    Also soweit ich die Developer-Documentation richtig verstanden hab, liefern mir die durch das NSXMLParserDelegate zu implementierenden Methoden entsprechend Events, auf die ich dann reagieren kann. Wie ich diese Methoden allerdings zu verstehen habe ist mein Problem. XPath hatten wir erst heute in der Vorlesung, drum bleibe ich wohl erstmal bei der SAX-Variante^^ Mal schauen woher ich da vielleicht noch den einen oder anderen Einstieg finde.

    @Benny990:
    Danke für die Links! Ich werde sie mir mal anschauen, allerdings wohl frühestens morgen und ich sag dann was dazu.