2010-10-03 2 views
5

Я хочу написать не очень сложный, но большой файл в своем приложении и отправить его по почте (используя MFMailComposeViewController) Поскольку NSXMLElement и связанные классы не переносятся на iPhone SDK, какие параметры у меня есть для создания XML-документов? Спасибо заранее.Как писать файлы XML?

+0

Возможный дубликат [iOS XML writer class] (http://stackoverflow.com/questions/3969959/ios-xml-writer-class) – Pang

ответ

2

Shameless саморекламы: KSXMLWriter

+0

Извлечь из вашего URL: «Поддержка iOS будет приятной в проекте». – JosephH

+0

Он должен работать, поскольку я использую только Foundation; просто еще не протестировал его –

-1

Это домашнее задание в здании NSString. Абстрактно, создать протокол, как:

@protocol XmlExport 
-(NSString*)xmlElementName; 
-(NSString*)xmlElementData; 
-(NSDictionary*)xmlAttributes; 
-(NSString*)toXML; 
-(NSArray*)xmlSubElements; 
@end 

Убедитесь, что все, что вы сохраняете его реализует и строить XML с чем-то вроде следующего:

-(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; 
} 
+3

Линия release/ноль - моя привычка, которая препятствует мне иметь оборванных указателей. Да, здесь здесь нет необходимости, но производительность очень низкая, и оптимизатор, скорее всего, удалит ее. Тем не менее, это по-прежнему привычка я рекомендую. –

+0

Что касается nil'ing из ваших vars, см. Http://iphonedevelopment.blogspot.com/2010/09/dealloc.html – TomH

2

Попробуйте использовать с открытым кодом XML stream writer for iOS:

  • Написано в Objective-C, один .h. и .m файл
  • Один @protocol для поддержки пространства имен и один для без

Пример:

// 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]; 

Это приводит следующую XML строку:

<Root>Text content for root element</Root> 
+0

Я как-то не могу комментировать ответ Джона Франклинса, но его ответ классический FAIL, так как он не убегает от XML. Всегда используйте правильный серийный номер в производственном коде, не пытайтесь сделать это выше. – ThomasRS

+0

Это не способ записи xml-данных в файл в strem – Arsynth

+0

Это поток XML-событий, а не байтов. Однако см. Документацию по вики, в которой также можно выводить байты. – ThomasRS

3

Я бы рекомендовал использовать KissXML. Автор начал в аналогичной ситуации с вами и создал NSXML-совместимую оболочку API вокруг libxml. Он обсуждает варианты и решения here в своем блоге.

Смежные вопросы