Showing posts with label XML. Show all posts
Showing posts with label XML. Show all posts

Tuesday, May 21, 2013

AFNetworking: Leer una respuesta XML en una aplicación para iPhone, con XCode

Con AFNetworking es muy fácil leer respuestas en XML o JSON que entregue un servidor.
Aquí un ejemplo con XML:

Primero deben bajar el AFNetworking a su computador desde el link:

https://github.com/AFNetworking/AFNetworking

Una vez descargada, descomprime la carpeta. Ahora contaras con una carpeta con un nombre similar (o igual) a: AFNetworking-AFNetworking-211cdfc

Ahora anda a XCode, selecciona tu proyecto, anda a Archivo y haz clic en la opción "Agregar archivo a <nombre_de_tu_proyecto>". Ahi busquen la carpeta AFNetworking-AFNetworking-211cdfc, ábranla y seleccionen la carpeta AFNetworking que está adentro.

Ya estás listo para empezar a conectarte con tu servidor.

Para empezar debes agregar los archivos al encabezado:

#import "AFXMLRequestOperation.h"
#import "AFHTTPClient.h"

Luego debes iniciar la comunicación con el servidor y obtener el XML.


        //Supongamos que deseamos enviar el mail y contraseña a nuestro servidor para obtener una respuesta cuando un usuario intenta iniciar sesión.
NSString *email = [self.txtUsername text];
        NSString *contrasena = [self.txtPassword text];
//Crea un NSDictonary con los parámetros
        NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                                email, @"email",
                                contrasena, @"contrasena",
                                nil];
        
//Indica la url de tu servidor
        NSURL *url = [[NSURL alloc] initWithString:@"http://www.miservidor.com"];
        AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
        [httpClient registerHTTPOperationClass:[AFXMLRequestOperation class]];
        [httpClient setDefaultHeader:@"Accept" value:@"application/xml"];
        //Indica donde se debe hacer la petición
NSMutableURLRequest *request1 = [httpClient requestWithMethod:@"POST" path:@"/iniciar_sesion" parameters:params];
        AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request1 success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
            
            XMLParser.delegate = self;

//Aquí leemos la respuesta del XML
            [XMLParser parse];
        } failure:nil];

//Aquí iniciamos la llamada
        [operation start];

Ahora falta crear las funciones para parsear el archivo XML, esto se puede lograr de diferentes maneras. Aquí muestro una:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
    self.currentElement = [elementName copy];
    self.ElementValue = [[NSMutableString alloc] init];
    
//Ejemplo de lectura
    if ([elementName isEqualToString:@"algun-campo"]) {    
       // hacer algo, ejemplo imprimir un mensaje...
    }
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    [self.ElementValue appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if([elementName isEqualToString:@"algun-campo"]){
    //hacer alguna acción, por ejemplo:
    NSLog(self.ElementValue);   
    }
}

Cualquier cosa dejen un comentario!



Bookmark and Share

Tuesday, October 25, 2011

Crear xml personalizado en Rails

En el controlador probablemente tienen lo siguiente:

def mi_accion
    @algos = Algo.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @algos }
    end
  end

El primer paso es sacar la información adicional que contiene el format.xml y dejarlo de esta manera:


def mi_accion
    @algos = Algo.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml
    end
  end

El segundo paso es crear un archivo nuevo en la sección Vistas (Views) con la extensión: .xml.builder
En este caso: mi_accion.xml.builder
y dentro de este archivo es donde podrán crear el xml a su gusto. Deben partir colocando xml.instruct! al inicio de su archivo. Puede tener una estructura como esta:

xml.instruct!
xml.algos do
  @algos.each do |algo|
     xml.algo
        xml.tipo algo.tipo
        xml.id algo.id
        xml.nombre algo.nombre
    end
  end
end

y generará algo como:

<algos>
  <algo>
   <tipo>0</tipo>
   <id>33</id>
   <nombre>Rafael</nombre>
  <algo>
</algos>

Recuerden siempre tener sólo un nodo raíz, de otra manera no se generará el archivo que buscan.

Bookmark and Share
Related Posts Plugin for WordPress, Blogger...