2009-12-03 14 views
9

Acabo de encontrarme con este y parece que no puedo obtener una respuesta clara de la documentación.NSXMLParser init con XML en formato NSString

Recupero algo de XML a través de una conexión HTTPS. Hago todo tipo de autenticación, etc., así que tengo un conjunto de clases que trata sobre esto de una manera agradable. El resultado es un NSString que dice algo como:

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

Esto significa que no hay encoding = "UTF-8" guión = "sí" method = "xml" u otros bloques de cabecera para indicar que se trata de XML real y no solo un NSString.

Supongo que usaré [NSXMLParser initWithData: NSData] para construir el analizador, pero ¿cómo formatearé o convertiré mi NSString de texto con formato XML en un objeto NSData adecuado que NSXMLParser comprenda y analice?

espero que tenga sentido, gracias por cualquier ayuda dada :)

Respuesta

29

Puede convertir una cadena a un objeto NSData utilizando el método dataUsingEncoding:

NSData *data = [myString dataUsingEncoding:NSUTF8StringEncoding]; 

continuación, se puede alimentar a esta NSXMLParser.

+0

Gracias Philippe, voy a probar esto de inmediato. – RickiG

+0

¡Perfecto! Justo lo que estaba buscando. Gracias. –

1

Por el momento NSXMLParser tiene los datos es más o menos van a estar esperando que sea XML ;-)

Estoy bastante seguro de la cabecera de instrucción de proceso es opcional en este contexto. La forma en que obtienes el NSString en el NSData va a dictar la codificación (usando dataUsingEncoding:).

(edit: yo estaba buscando para la codificación de enumeración, pero Philippe Leybaert se me adelantó, pero lo repita aquí de todos modos, algo así como: [nsString dataUsingEncoding:NSUTF8StringEncoding])

he pasado NSString s de XML de esta manera antes sin problemas.

No es específico para esta pregunta como tal, pero en el tema de análisis XML en un contexto de iPhone en general, también puede encontrar this blog entry of mine interesante.

+0

Es opcional, sí, y generalmente se debe omitir si solo es 1.0/UTF-8. Aunque técnicamente, la Declaración XML no es una instrucción de procesamiento, aunque parezca una. – bobince

+0

Sí, pensé que alguien se daría cuenta de eso, no podría pensar en una mejor manera de referirse a él, pero la precisión es importante, tienes razón. – philsquared

+0

Gracias Phil :) ¡Lo encontré interesante! especialmente que envuelves algunas de las cosas de SAX en un nivel de abstracción hacia arriba, que seguramente serán útiles. – RickiG

1

Las cabeceras son opcionales, pero se pueden insertar las cabeceras correspondientes a sí mismo si es necesario:

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

Gracias por la sugerencia/código notnoop! Para mi uso prefiero seguir con el análisis, pero supongo que si estuviera pasando esto a un objeto que solo aceptaría xml "real" este sería el camino a seguir. – RickiG

Cuestiones relacionadas