Teile einer XML in mehrere NSData

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

  • Teile einer XML in mehrere NSData

    Hi Leute,

    wie der Titel schon sagt, bastle ich daran eine XML zu zerlegen um mehrere Objekte daraus zu machen.
    Das Endziel ist, eingehende XML-Daten, die in einer einzelnen XML-Datei kommen, in mehrere zu zerlegen, und diese in einzelnen *.plist Dateien zu speichern.

    Wie der NSXMLParser funktioniert ist mir klar.

    Die Methode

    Quellcode

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

    ...gibt mir nen leeren String zurück, wenn der Inhalt aus weiteren Elementen besteht, aber
    genau die Elmente will ich ja haben.

    Was mir nicht klar ist, wie bekomme ich da einzelne Root-Elemente raus:

    Quellcode

    1. <root>
    2. <element id="1">
    3. <here/><some/><other/><elements/>
    4. </element>
    5. <element id="2">
    6. <here/><some/><other/><elements/>
    7. </element>
    8. <element id="3">
    9. <here/><some/><other/><elements/>
    10. </element>
    11. </root>
    Alles anzeigen

    Für dieses Beispiel, wie bekomme ich ein einzelnes Objekt für die einzelnen Inhalte von element 1 bis 3.
    dealloc {
    [myLeak retain];
    }
  • XSLT sieht mir nach ner Möglichkeit aus, auch wenn ich damit gerade zum ersten mal in Berührung komme.
    Da muss ich aber ne externe lib einbinden oder?

    Ansonsten habe ich schon überlegt, das NSData Objekt mit dem XML einfach in einen String zu wandeln, auseinander zu nehmen und in einzelnen NSData Objekten wieder zusammen zu setzen.
    dealloc {
    [myLeak retain];
    }
  • Du willst eine Textdatei mit XML-Format als XML laden, in einen Text umwandeln, als XML scannen, um dann die Knoten zu finden? Du merkst selbst, dass das die Inflation er Indirektion ist.

    Wieso scannst du das nicht als XML und fischst dir die interessanten Knoten heraus.
    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"?
  • Amin Negm-Awad schrieb:


    Du willst eine Textdatei mit XML-Format als XML laden, in einen Text umwandeln, als XML scannen, um dann die Knoten zu finden? Du merkst selbst, dass das die Inflation er Indirektion ist.


    Wenn man das so formuliert, ist der Ansatz schon ganz schön bescheuert. :huh:
    Du meinst also, dass ich es erst garnicht parse, sondern die Daten direkt als NSString einlese und auseinander pflücke?

    Also XSL-Transformation gibts nur durch NSXMLDocument, also nicht fürs iPhone, soweit ich das in der Doku richtig verstanden habe.
    dealloc {
    [myLeak retain];
    }
  • Hm, ich hoffe ich habe die richtige Essenz da raus gezogen.

    Arbeite jetzt mit folgendem Ansatz:

    Quellcode

    1. - (void)parser: (NSXMLParser *) parser
    2. didStartElement:(NSString *) elementName
    3. namespaceURI: (NSString *) namespaceURI
    4. qualifiedName: (NSString *) qName
    5. attributes: (NSDictionary *) attributeDict
    6. {
    7. if ([elementName isEqualToString:@"myRootNewElement"]) {
    8. aXMLString = [[NSMutableString alloc] init];
    9. }
    10. if (aXMLString)
    11. {
    12. [aXMLString appendFormat:@"<%@", elementName];
    13. id key;
    14. NSEnumerator *enumerator = [attributeDict keyEnumerator];
    15. while ((key = [enumerator nextObject])) {
    16. NSLog(@"%@ : %@", key, [attributeDict objectForKey:key]);
    17. [aXMLString appendFormat:@" %@=\"%@\"", key, attributeDict];
    18. }
    19. [aXMLString appendString:@">"];
    20. }
    21. }
    22. - (void)parser: (NSXMLParser *) parser
    23. foundCharacters:(NSString *) string
    24. {
    25. if (!currentStringValue)
    26. currentStringValue = [[NSMutableString alloc] init]; //WithCapacity:50];
    27. [currentStringValue appendString:string];
    28. }
    29. - (void)parser: (NSXMLParser *) parser
    30. didEndElement: (NSString *) elementName
    31. namespaceURI: (NSString *) namespaceURI
    32. qualifiedName: (NSString *) qName
    33. {
    34. [aXMLString appendFormat:@"%@<%@/>",currentStringValue , elementName];
    35. if ([elementName isEqualToString:@"myRootNewElement"]) {
    36. [aXMLString relese], aXMLString = nil;
    37. // Speichern und aXMLString zurücksetzen
    38. }
    39. // release currentStringValue, falls gesetzt
    40. if (currentStringValue)
    41. {
    42. [currentStringValue release];
    43. currentStringValue = nil;
    44. }
    45. }
    Alles anzeigen


    Danke, dass ihr euch bemüht den Kram in meinen Kopf zu quetschen. :)
    dealloc {
    [myLeak retain];
    }