iPhone XMLRequest

Tengo una API que envía una solicitud XML a un servidor:

   YourUsername YourPassword   Mustermann Max Firma KG Musterstrasse 1 11111 Musterstadt Niedersachsen DE email@adresse.de +43-111-111111 +43-111-111111 remarks   

¿Cómo hago esto en el iPhone?

Utilizaría el formato de cadenas para una estructura tan simple.

Puedes usar libxml2 . Sospecho que es el enfoque más rápido. Agregue su marco a su proyecto (consulte la sección “configuración de su proyecto” de este documento ).

En el encabezado de su escritor de XML, agregue las siguientes importaciones:

 #import  #import  

En la implementación, escribe un método para generar tu XML. Presumiblemente, enviará los bytes de su solicitud a través de un objeto NSData* , por lo que puede escribir algo como esto:

 - (NSData *) xmlDataFromRequest { xmlTextWriterPtr _writer; xmlBufferPtr _buf; xmlChar *_tmp; const char *_UTF8Encoding = "UTF-8"; _buf = xmlBufferCreate(); _writer = xmlNewTextWriterMemory(_buf, 0); //  xmlTextWriterStartDocument(_writer, "1.0", _UTF8Encoding, NULL); //  xmlTextWriterStartElement(_writer, BAD_CAST "request"); xmlTextWriterWriteAttribute(_writer, BAD_CAST "type", BAD_CAST "handle"); xmlTextWriterWriteAttribute(_writer, BAD_CAST "action", BAD_CAST "update"); xmlTextWriterEndElement(_writer); // ... xmlTextWriterStartElement(_writer, BAD_CAST "userdata"); xmlTextWriterStartElement(_writer, BAD_CAST "username"); _tmp = [self xmlCharPtrForInput:[[NSString stringWithFormat:@"YourUsername"] cStringUsingEncoding:NSUTF8StringEncoding] withEncoding:_UTF8Encoding]; xmlTextWriterWriteString(_writer, _tmp); xmlTextWriterEndElement(_writer); // closing  xmlFree(_tmp); xmlTextWriterStartElement(_writer, BAD_CAST "password"); _tmp = [self xmlCharPtrForInput:[[NSString stringWithFormat:@"YourPassword"] cStringUsingEncoding:NSUTF8StringEncoding] withEncoding:_UTF8Encoding]; xmlTextWriterWriteString(_writer, _tmp); xmlTextWriterEndElement(_writer); // closing  xmlFree(_tmp); xmlTextWriterEndElement(_writer); // closing  // etc. xmlTextWriterEndDocument(_writer); xmlFreeTextWriter(_writer); // turn libxml2 buffer into NSData* object NSData *_xmlData = [NSData dataWithBytes:(_buf->content) length:(_buf->use)]; xmlBufferFree(_buf); return _xmlData; } 

Aquí tengo un método de ayuda que utilizo para convertir const char * en xmlChar * :

 - (xmlChar *) xmlCharPtrForInput:(const char *)_input withEncoding:(const char *)_encoding { xmlChar *_output; int _ret; int _size; int _outputSize; int _temp; xmlCharEncodingHandlerPtr _handler; if (_input == 0) return 0; _handler = xmlFindCharEncodingHandler(_encoding); if (!_handler) { NSLog(@"convertInput: no encoding handler found for '%s'\n", (_encoding ? _encoding : "")); return 0; } _size = (int) strlen(_input) + 1; _outputSize = _size * 2 - 1; _output = (unsigned char *) xmlMalloc((size_t) _outputSize); if (_output != 0) { _temp = _size - 1; _ret = _handler->input(_output, &_outputSize, (const xmlChar *) _input, &_temp); if ((_ret < 0) || (_temp - _size + 1)) { if (_ret < 0) { NSLog(@"convertInput: conversion wasn't successful.\n"); } else { NSLog(@"convertInput: conversion wasn't successful. Converted: %i octets.\n", _temp); } xmlFree(_output); _output = 0; } else { _output = (unsigned char *) xmlRealloc(_output, _outputSize + 1); _output[_outputSize] = 0; /*null terminating out */ } } else { NSLog(@"convertInput: no memory\n"); } return _output; }