Je veux écrire un fichier pas si compliqué mais volumineux dans mon application et pouvoir l'envoyer par mail (en utilisant MFMailComposeViewController) Puisque NSXMLElement et les classes liées ne sont pas portées au SDK iPhone quelles options ai-je pour créer des documents XML? Merci d'avance.Comment écrire des fichiers XML?
Répondre
auto-promotion éhontée: KSXMLWriter
Extrait de votre URL: "Le support iOS serait bien dans le projet." – JosephH
Cela devrait fonctionner, car je n'utilise que Foundation; Je n'ai tout simplement pas encore testé –
C'est un exercice de devoirs dans le bâtiment NSString. Abstraitement, créez un protocole comme:
@protocol XmlExport
-(NSString*)xmlElementName;
-(NSString*)xmlElementData;
-(NSDictionary*)xmlAttributes;
-(NSString*)toXML;
-(NSArray*)xmlSubElements;
@end
Assurez-vous que tout ce que vous enregistrez implémente et construire le XML avec quelque chose comme ce qui suit:
-(NSString*)toXML {
NSMutableString *xmlString;
NSString *returnString;
/* Opening tag */
xmlString = [[NSMutableString alloc] initWithFormat:@"<%@", [self xmlElementName]];
for (NSString *type in [self xmlAttributes]) {
[xmlString appendFormat:@" %@=\"%@\"", type, [[self xmlAttributes] valueForKey:type]];
}
[xmlString appendString:@">"];
/* Add subelements */
for (id<XmlExport> *s in [self xmlSubElements]) {
[xmlString appendString:[s toXML]];
}
/* Data */
if ([self xmlElementData]) {
[xmlString appendString:[self xmlElementData]];
}
/* Close it up */
[xmlString appendFormat:@"</%@>", [self xmlElementName]];
/* Return immutable, free temp memory */
returnString = [NSString stringWithString:xmlString];
[xmlString release]; xmlString = nil;
return returnString;
}
La ligne release/nil est une de mes habitudes qui m'empêche d'avoir jamais problèmes de pointeur pendants. Oui, c'est inutile ici, mais le coût de la performance est très bas et l'optimiseur va probablement l'enlever. Néanmoins, c'est toujours une habitude que je recommande. –
En ce qui concerne la suppression de vos vars, voir http://iphonedevelopment.blogspot.com/2010/09/dealloc.html – TomH
Essayez la version open source XML stream writer for iOS:
- Ecrit dans Objective-C, un seul .h. et le fichier .m
- Un @protocol pour le support d'espace de nom et un pour sans
Exemple:
// allocate serializer
XMLWriter* xmlWriter = [[XMLWriter alloc]init];
// start writing XML elements
[xmlWriter writeStartElement:@"Root"];
[xmlWriter writeCharacters:@"Text content for root element"];
[xmlWriter writeEndElement];
// get the resulting XML string
NSString* xml = [xmlWriter toString];
Ce produit la chaîne XML suivante:
<Root>Text content for root element</Root>
Je ne suis pas en mesure de commenter la réponse de John Franklins, mais sa réponse est un échec classique car il ne s'échappe pas de XML. Toujours utiliser un sérialiseur approprié dans le code de production, ne pas essayer ce qui précède. – ThomasRS
Ce n'est pas un moyen d'écrire des données XML dans un fichier – Arsynth
Il s'agit d'un flux d'événements XML, pas d'octets. Cependant, consultez la documentation du wiki pour savoir comment afficher des octets en continu aussi. – ThomasRS
duplication possible de la classe [iOS XML writer class] (http://stackoverflow.com/questions/3969959/ios-xml-writer-class) – Pang