GDataXML
来看GDataXML,它是一种DOM方式的解析类库。DOM实现的原理是把整个xml文档一次性读出,放在一个树型结构里。在需要的时候,查找特定节点,然后对节点进行读或写。
在使用之前呢,我们还是先从网上下载GDataXML包,里面两个文件GDataXMLNode.h和GDataXMLNode.m导入到项目中来,编译,发现报错了,这是因为GDataXML是依赖libmxl2的,我们要去项目的Target中做一些设置。
- 找到项目的Tarfet,进入Build Phases里面的Link Binary With Libraries,点击“加号”,搜索libxml,把出现的包添加进去,这里最新版的XCode7和iOS9中,是libxml.2.2.tbd。
- 再来到Build Settings,我们可以搜索一下,找到Header Search Paths,添加路径“/usr/include/libxml2”。
- 再找到Other Link Flags,添加“-lxml2“
- 还有就是如果你下载的GDataXML是不支持ARC的,那么你就要像上面那样去添加“-fno-objc-arc”,这个视你下载的GDataXML包版本而定。
再次编译,通过。
注意:用这个解析你要对你的XML文件的节点(也就是字典的键值非常了解)
代码附上:
(1)由data转为的xml文件
NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:requestUrl]];
GDataXMLDocument *xmlDoc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
GDataXMLElement *rootElement = [xmlDoc rootElement];
NSArray *first = [rootElement elementsForName:@"vd"];
if (first.count > 0) {
NSArray *second = [[first objectAtIndex:0] elementsForName:@"vi"];
if (second.count > 0) {
NSArray *third = [[second objectAtIndex:0] elementsForName:@"url"];
if (third.count > 0) {
targetUrl = [[third objectAtIndex:0] stringValue];
}
}
}
(2)其实是一样的,这个可能会更详细一点:- (IBAction)GDataXML:(id)sender {
NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
NSData *data = [[NSData alloc]initWithContentsOfFile:path];
//对象初始化
GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:data options:0 error:nil];
//获取根节点
GDataXMLElement *rootElement = [doc rootElement];
//获取其他节点
NSArray *students = [rootElement elementsForName:@"student"];
//初始化可变数组,用来显示到textView
self.GDatatext = [[NSMutableString alloc]initWithString:@""];
for (GDataXMLElement *student in students) {
//获取节点属性
GDataXMLElement *pidElement = [[student elementsForName:@"pid"] objectAtIndex:0];
NSString *pid = [pidElement stringValue];
GDataXMLElement *nameElement = [[student elementsForName:@"name"] objectAtIndex:0];
NSString *name = [nameElement stringValue];
GDataXMLElement *sexElement = [[student elementsForName:@"sex"] objectAtIndex:0];
NSString *sex = [sexElement stringValue];
GDataXMLElement *ageElement = [[student elementsForName:@"age"] objectAtIndex:0];
NSString *age = [ageElement stringValue];
//调整一下姿势,添加到可变长字符串~~
NSString *t = [NSString stringWithFormat:@"学号:%@ 姓名:%@ 性别:%@ 年龄:%@\n", pid, name, sex, age];
[self.GDatatext appendString:t];
}
self.textView.text = self.GDatatext;
}