2009-12-03 10 views
9

Mi sono imbattuto in questo e non ho potuto ottenere una risposta chiara dalla documentazione.NSXMLParser init con XML in formato NSString

Im recupero di alcuni XML tramite una connessione HTTPS. Faccio tutti i tipi di autenticazione ecc. Quindi ho un set di classi che si occupa di questo in un modo filettato. Il risultato è un NSString che va qualcosa come:

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

Ciò significa che non v'è alcuna codifica = "UTF-8" rientro = "sì" method = "xml" o altri blocchi di intestazione per indicare che si tratta XML effettivo e non solo un NSString.

Suppongo che userò [NSXMLParser initWithData: NSData] per costruire il parser, ma come modifico o getto la mia NSString di testo formattato xml in un oggetto NSData corretto che NSXMLParser comprenderà e analizzerà?

Speranza ha senso, grazie per qualsiasi aiuto dato :)

risposta

29

È possibile convertire una stringa in un oggetto NSData utilizzando il metodo dataUsingEncoding:

NSData *data = [myString dataUsingEncoding:NSUTF8StringEncoding]; 

È quindi possibile alimentare questo a NSXMLParser.

+0

Grazie Philippe, cercherò questo fuori immediatamente. – RickiG

+0

Perfetto! Proprio quello che stavo cercando. Grazie. –

1

Con il tempo NSXMLParser ha i dati è praticamente andando a essere in attesa di essere XML ;-)

Sono abbastanza sicuro che l'intestazione di istruzione di elaborazione è facoltativo in questo contesto. Il modo in cui ottieni lo NSString nello NSData sta per dettare la codifica (utilizzando dataUsingEncoding:).

(edit: cercavo l'enumerazione di codifica, ma Philippe Leybaert mi ha battuto ad esso, ma per ripeto qui comunque, qualcosa di simile a: [nsString dataUsingEncoding:NSUTF8StringEncoding])

ho passato NSString s di XML in questo modo prima senza problemi.

Non specifico per questa domanda in quanto tale, ma in materia di analisi XML in un contesto di iPhone in generale è possibile trovare anche this blog entry of mine interessante.

+0

È opzionale, sì, e in genere dovrebbe essere omesso se è solo 1.0/UTF-8. Sebbene tecnicamente la Dichiarazione XML non sia un'istruzione di elaborazione, anche se sembra una. – bobince

+0

sì, pensavo che qualcuno avrebbe capito su questo - non poteva pensare a un modo migliore di riferirsi ad esso - ma la precisione è importante, hai ragione. – philsquared

+0

Grazie Phil :) L'ho trovato interessante! soprattutto che avvolgi alcune delle cose SAX in un livello di astrazione, che sicuramente ti tornerà utile. – RickiG

1

Le intestazioni sono opzionali, ma è possibile inserire le intestazioni appropriate da soli, se necessario:

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

Grazie per il suggerimento/codice notnoop! Per il mio utilizzo preferirei continuare con l'analisi, ma suppongo che se passassi questo a un oggetto che accetterebbe solo "reale" xml questa sarebbe la strada da percorrere. – RickiG

Problemi correlati