首页 > 代码库 > iOS 中 XML 数据交换格式

iOS 中 XML 数据交换格式

     XML 是一种自描述的数据交换格式,但是 XML 的数据交换格式并没有 JSON 来的轻便,但是无可否认的是,XML 的应用范围也是非常广泛的,比如在 ROS(一个开源机器人操作系统)中利用 XML 来描述包的依赖关系等,当然还有很多了。

     对于 XML 文档操作包括了“读”与“写”,读入 XML 文档并分析的过程称为“解析” XML 文档,“解析” XML 文档在实际开发中是占很大比重的。

     读写 XML 文档,目前流行的有两种模式:SAX 和 DOM 。SAM 是一种基于事件驱动的解析模式。解析 XML 的时候,程序从上到下读取 XML 文档,如果遇到开始标签、结束标签、属性等,就会触发相应的事件,但是这种解析 XML 文件有一个弊端就是只能读取 XML 文档,而不能写入 XML 文档。但是也是有优点的,就是解析速度快,而iOS中推荐使用 SAX 解析模式。

     DOM 模式是将 XML 文档作为一棵树状结构来进行分析,提供获取节点的内容,以及相关属性,或是新增、删除和修改节点的内容。 XML 解析器在加载 XML 文件以后,DOM 将 XML 文件的元素视为一个树状结构的节点,一次性读入到内存中。如果文档比较大,解析速度就会比较慢,这是不可避免的。但是 DOM 模式有一点是 SAX 无法取代的,就是 DOM 能够修改 XML 文档。

     NSXML

     NSXML 是苹果自家默认的解析框架,采用 SAX 模式进行解析。它是 SAX 解析模式的代表。NSXML 框架中的核心是 NSXMLParser 和它的委托协议 NSXMLParserDelegate。主要的解析工作是在委托协议的实现类中完成的,委托中定义了很多回调方法,在 SAX 解析器从上到下遍历 XML 文档的过程中,遇到开始标签、结束标签、文档开始、文档结束和字符串就会触发相关方法。

     常用的方法:

     (1)parserDidStartDocument --文档开始的时候触发

     (2)parser:didStartElement:namespaceURI:qualifiedName:attributes --遇到一个开始标签时开始触发,其中 namespaceURI 部分是命名空间, qualifiedName 是限定名,attributes 是字典类型的属性集合

     (3)parser:foundCharacters --遇到字符串时触发

     (4)parser:didEndElement:namespaceURI:qualifiedName --遇到结束标签时触发

     (5)parserDidEndDocument --遇到文档结束时触发

      下面实现一个解析的XMLParser类。

      XMLParser.h

#import <Foundation/Foundation.h>

@interface XMLParser : NSObject <NSXMLParserDelegate>

//开始解析
-(void)start;

@end
     XMLParser.m

-(void)start
{
    NSString* path = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"xml"];     //解析一个Test.xml文件的文档
    
    NSURL *url = [NSURL fileURLWithPath:path];
    //开始解析XML
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
    parser.delegate = self;
    [parser parse];
    NSLog(@"解析完成...");
}
    

    微笑如有不足之处还望指出!


iOS 中 XML 数据交换格式