10 Stimmen

NSXMLParser init mit XML im NSString-Format

Ich bin gerade auf diese Frage gestoßen und konnte in der Dokumentation keine klare Antwort finden.

Ich rufe einige XML über eine HTTPS-Verbindung ab. Ich tue alle Arten von Authentifizierung usw., so dass ich eine Reihe von Klassen, die mit diesem in einem schönen threaded Weg befasst haben. Das Ergebnis ist ein NSString, die etwas wie geht:

<response>
//some XML formatted test
</response>

Das bedeutet, dass es kein encoding="UTF-8" indent="yes" method="xml" oder andere Header-Blöcke gibt, die anzeigen, dass es sich um tatsächliches XML und nicht nur um einen NSString handelt.

Ich schätze, ich werde [NSXMLParser initWithData:NSData] verwenden, um den Parser zu konstruieren, aber wie werde ich formatieren oder meine NSString von xml-formatierten Text in ein richtiges NSData-Objekt, das NSXMLParser verstehen und analysieren wird?

Ich hoffe, es macht Sinn, und danke für jede Hilfe :)

31voto

Philippe Leybaert Punkte 161931

Sie können eine Zeichenkette in ein NSData-Objekt konvertieren, indem Sie die Methode dataUsingEncoding verwenden:

NSData *data = [myString dataUsingEncoding:NSUTF8StringEncoding];

Diese können Sie dann in den NSXMLParser einspeisen.

2voto

notnoop Punkte 57727

Die Kopfzeilen sind optional, aber Sie können die entsprechenden Kopfzeilen bei Bedarf selbst einfügen:

NSString *header = @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
NSString *xml = [NSString stringWithFormat:@"%@\n%@", header, response);
NSData *data = [xml dataUsingEncoding:NSUTF8StringEncoding];
NSXMLParser *praser = [NSXMLParser initWithData:data];

1voto

philsquared Punkte 22090

Bis zu dem Zeitpunkt NSXMLParser die Daten hat, wird es ziemlich sicher erwarten, dass sie XML sind ;-)

Ich bin mir ziemlich sicher, dass der Kopf der Verarbeitungsanweisung in diesem Zusammenhang optional ist. Auf diese Weise erhalten Sie die NSString in die NSData wird die Kodierung vorgeben (mit dataUsingEncoding: ).

(edit: Ich habe nach dem Encoding Enum gesucht, aber Philippe Leybaert kam mir zuvor, aber um es hier trotzdem zu wiederholen, etwas wie: [nsString dataUsingEncoding:NSUTF8StringEncoding] )

Ich habe bestanden NSString s von XML auf diese Weise vor ohne Probleme.

Nicht spezifisch für diese Frage als solche, aber zum Thema XML-Parsing im iPhone-Kontext im Allgemeinen finden Sie vielleicht dieser Blogeintrag von mir auch interessant.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X