2009-12-03 7 views
9

Ich bin gerade in diesen hineingelaufen und konnte keine klare Antwort aus der Dokumentation bekommen.NSXMLParser-Init mit XML im NSString-Format

Im Abruf einiger XML über eine HTTPS-Verbindung. Ich mache alle Arten von Authentifizierung usw., also habe ich eine Reihe von Klassen, die sich mit diesem Thema auseinandersetzen. Das Ergebnis ist ein NSString, die wie etwas geht:

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

Das bedeutet, dass es keine Codierung = „UTF-8“ indent = „yes“ method = „xml“ oder andere Header-Blöcke, um anzuzeigen, dass dies tatsächliches XML und nicht nur ein NSString.

Ich denke, ich werde [NSXMLParser initWithData: NSData] verwenden, um den Parser zu erstellen, aber wie formatiere oder umgebe ich meine NSString von xml-formatierten Text in einem richtigen NSData-Objekt, das NSXMLParser verstehen und analysieren?

Hoffe, dass es Sinn macht, danke für jede Hilfe gegeben :)

Antwort

29

Sie können eine Zeichenfolge in ein Objekt NSData wandeln die dataUsingEncoding Methode:

NSData *data = [myString dataUsingEncoding:NSUTF8StringEncoding]; 

Anschließend können Sie diese zu NSXMLParser füttern.

+0

Dank Philippe, ich werde diese weg direkt ausprobieren. – RickiG

+0

Perfekt! Genau das, wonach ich gesucht habe. Vielen Dank. –

1

Als NSXMLParser hat die Daten, die es so ziemlich geht es zu erwarten XML sein ;-)

Ich bin mir ziemlich sicher, dass die Verarbeitungsanweisung Header in diesem Zusammenhang ist optional. Die Art, wie Sie die NSString in die NSData bekommen, diktiert die Codierung (mit dataUsingEncoding:).

(edit: ich für die Codierung Enum war auf der Suche, aber Philippe Leybaert schlagen mich, aber es hier sowieso zu wiederholen, so etwas wie: [nsString dataUsingEncoding:NSUTF8StringEncoding])

I NSString s von XML auf diese Weise bestanden haben vorher ohne Probleme.

Nicht spezifisch für diese Frage als solche, aber zum Thema XML-Parsing in einem iPhone-Kontext im Allgemeinen finden Sie möglicherweise auch this blog entry of mine interessant.

+0

Es ist optional, ja, und sollte generell weggelassen werden, wenn es nur 1.0/UTF-8 ist. Obwohl die XML-Deklaration technisch gesehen keine Verarbeitungsanweisung ist, obwohl sie wie eine aussieht. – bobince

+0

Ja, ich dachte jemand würde das aufgreifen - ich könnte mir keinen besseren Weg vorstellen, um darauf zu verweisen - aber Genauigkeit ist wichtig, du hast Recht. – philsquared

+0

Danke Phil :) Ich fand es interessant! vor allem, dass du etwas von dem SAX-Zeug auf eine Abstraktionsebene nach oben bringst, das wird sicherlich nützlich sein. – RickiG

1

Die Header sind optional, aber Sie können die entsprechenden Header selbst einfügen, wenn nötig:

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]; 
+0

Danke für den Vorschlag/Code notnoop! Für meinen Gebrauch würde ich lieber mit dem Parsen fortfahren, aber ich denke, wenn ich dies an ein Objekt weitergeben würde, das nur "echtes" XML akzeptieren würde, wäre das der richtige Weg. – RickiG

Verwandte Themen