GDataXML是一套Google使用Objective-C开发的DOM方式XML解析类库,支持读取和修改XML文档,支持XPath方式查询, GDataXML 是 iOS 下的一款轻量级 XML 解析器。它与C#的XmlDocument类似。
一、GData配置
1.将类引入项目中,添加libxml2.dylib
2.在Build Phases的Compile Sources中找到GDataXMLNode.m添加-fno-objc-arc
3.进入Build Settings,搜索Header Search Paths,添加路径/usr/include/libxml2
4.再搜索Other Linker Flags,添加新flag: -lxml2
二、GData的使用
1.引入GDataXMLNode.h
2.第三方中有好几个方法,这里可能没有列举全面 ,方法都差不多,可以查一下基本可以
3.对于Xpath,它是XML的查询方法,在.Net、IOS中是一样的,具体可以查询http://www.w3school.com.cn/xpath/index.asp
//
// ViewController.m
// GDataXml
//
// Created by City--Online on 15/4/29.
// Copyright (c) 2015年 CYW. All rights reserved.
//
#import "ViewController.h"
#import "GDataXMLNode.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSString *path=[[NSBundle mainBundle] pathForResource:@"user" ofType:@"xml"];
NSString *content=[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
// GData比较简单,理清GDataXMLDocument、GDataXMLElement、GDataXMLNode三者的关系这样更容易理解
// 1.GDataXMLElement继承GDataXMLNode,GDataXMLElement可以作为GDataXMLNode,所以GDataXMLNode.h中返回的数组都是GDataXMLNode类型的数组
// 2.<></>表示一个GDataXMLElement
// 3.<>里的每一个属性为一个GDataXMLNode
// 实例化GDataXMLDocument
GDataXMLDocument *document=[[GDataXMLDocument alloc]initWithXMLString:content options:0 error:nil];
// 获得根元素
GDataXMLElement *rootElement=document.rootElement;
NSArray *users=[rootElement elementsForName:@"User"];
// users作为 GDataXMLNode数组
for (GDataXMLNode *userNode in users) {
NSArray *arr=[userNode children];
for (GDataXMLElement *e in arr) {
NSLog(@"%@",e);
}
}
// users作为 GDataXMLElement数组
for (GDataXMLElement *user in users) {
GDataXMLNode *userIdNode=[user attributeForName:@"id"];
NSLog(@"userId=%@",userIdNode.stringValue);
for (GDataXMLElement *element in user.children) {
if ([element.name isEqualToString:@"name"]) {
NSLog(@"name=%@",element.stringValue);
GDataXMLNode *idnode=[element attributeForName:@"id"];
NSLog(@"id=%@",idnode.stringValue);
}
else
{
NSLog(@"Age=%@\n\n",element.stringValue);
}
}
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end