XML也许是我们储存数据和通讯数据中最常见的一种简易方式,当我们来到XML的海洋时,我们会发现当我们用iPhone程序解析XML时,我们是有如此多的选项,让人眼花缭乱。iOS SDK本身就带有两种不同的解析库可以使用,除此之外还有很多很受欢迎的第三方的库,比如说 TBXML, TouchXML, KissXML, TinyXML, 和 GDataXML,我们究竟如何选择呢?真是个问题。
究竟选哪一个解析器取决于你想要让这个解析器干些什么事情:
- 如果你读取的是很小的文件的话,小文件的读取并不会影响任何性能,所以你应该使用即是Objective-C写的,又能够支持XPath的,我在这里特别推荐TouchXML, KissXML, 和GDataXML
- 如果你希望使用读写功能,而性能对你来说又不是非常重要的话,我推荐你使用 KissXML或者GDataXML 这种功能强大的库。
- 而如果你要读取的XML文件非常大,而性能也很重要的话,你也许就应该考虑libxml2 SAX, TBXML, o或者libxml DOM 了
建议采用GDataXML或者libxml2 SAX。
GDataXML是Google开发的一个XML解析库,轻便,特点使用非常简单,支持XPath。
GoogleCode地址:
由于使用的SVN,没装只好自己Copy下来了,不过可恶的是版本太老了,看注释是08年写的,到现在都5年了,不支持ARC,还要添加点编译命令,可看:《》。
开始:
第一步,加入框架:libxml2.dylib
第二步,设置 Search Paths 中 Header Search Paths 为 /usr/include/libxml2
第三步,导入头文件:GDataXMLNode.h
然后帖个例子,也是在别人站上看到的,XML结构如下:
Ryan 24 Tang 23
解析:
//获取工程目录的xml文件 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"users" ofType:@"xml"]; NSData *xmlData = [[NSData alloc] initWithContentsOfFile:filePath]; //使用NSData对象初始化 GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:nil]; //获取根节点(Users) GDataXMLElement *rootElement = [doc rootElement]; //获取根节点下的节点(User) NSArray *users = [rootElement elementsForName:@"User"]; for (GDataXMLElement *user in users) { //User节点的id属性 NSString *userId = [[user attributeForName:@"id"] stringValue]; NSLog(@"User id is:%@",userId); //获取name节点的值 GDataXMLElement *nameElement = [[user elementsForName:@"name"] objectAtIndex:0]; NSString *name = [nameElement stringValue]; NSLog(@"User name is:%@",name); //获取age节点的值 GDataXMLElement *ageElement = [[user elementsForName:@"age"] objectAtIndex:0]; NSString *age = [ageElement stringValue]; NSLog(@"User age is:%@",age); NSLog(@"-------------------"); }