2010-10-03 109 views
5

我想在我的应用程序中编写一个不那么复杂但很大的文件,并且能够通过邮件发送它(使用MFMailComposeViewController) 由于NSXMLElement和相关类没有移植到iPhone SDK我有什么选项可以创建XML文档? 在此先感谢。如何编写XML文件?

+0

[iOS XML writer class]的可能重复(http://stackoverflow.com/questions/3969959/ios-xml-writer-class) – Pang 2015-07-21 01:08:10

回答

2

无耻的自我推销:KSXMLWriter

+0

从您的URL中提取:“iOS支持在项目中很好。” – JosephH 2011-02-15 17:05:31

+0

它应该工作,因为我只使用基金会;只是还没有测试过它 – 2011-02-21 12:40:00

-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/nil行是我的一种习惯,它使我永远不会有悬挂指针问题。是的,这里没有必要,但性能成本非常低,优化器可能会将其删除。尽管如此,它仍然是我推荐的习惯。 – 2010-10-03 10:06:25

+0

关于删除您的变量,请参阅http://iphonedevelopment.blogspot.com/2010/09/dealloc.html – TomH 2010-10-03 12:32:48

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 2010-10-20 02:25:54

+0

这不是将xml数据写入文件的方法 – Arsynth 2013-10-28 08:52:53

+0

它是XML事件流,而不是字节流。不过,请参阅wiki文档以了解如何连续输出字节。 – ThomasRS 2013-10-28 09:06:35

3

我会建议使用KissXML。作者以与您类似的情况开始创建一个围绕libxml的兼容NSXML的API包装器。他在他的博客上讨论了选项和决定here