IOS中用于解析XML文件的方法有很多,在SDK中也有自带的方法,但是大家更偏于应用第三方的库,一方面高效,另外一方面也更方便使用。下面就介绍一下其中一个第三方库GDataXML的使用,给自己留念!
将GDataXML库添加到自己的工程中得步骤:
1.将两个文件GDataXMLNode.h和GDataXMLNode.m拖拽到工程中。
2.到Target-->Build Phases-->Link Binary With Libraries路径下添加库 libxml2.dylib 到工程中。
3.到Target-->Build Settings-->Header Search Paths下,双击之后点击+按钮,添加 /usr/include/libxml2 到工程中,如下图:
4.到Target-->Build Settings-->Other Linker Flags下,添加 -lxml2 到工程中。
到此,配置结束,引用文件的头文件即可。
下面介绍一下这个库的使用:
我的XML文件如下:
解析代码如下:
//获取工程目录的xml文件
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"question" ofType:@"xml"];
NSData *xmlData = [[NSData alloc] initWithContentsOfFile:filePath];
//使用NSData对象初始化
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData encoding:NSUTF8StringEncoding error:nil];
GDataXMLElement *rootElement = [doc rootElement];
//获取根节点下的节点(rating)
NSMutableArray *ratingAry = [[NSMutableArray alloc] initWithArray:[rootElement elementsForName:@"rating"]];
for (GDataXMLElement *rating in ratingAry) {
//rating节点的name属性
NSString *ratingName = [[rating attributeForName:@"name"] stringValue];
NSLog(@"rating name is:%@",ratingName);
NSArray *questionAry = [rating elementsForName:@"question"];
for (GDataXMLElement *question in questionAry) {
//获取title节点的值
GDataXMLElement *titleElement = [[question elementsForName:@"title"] objectAtIndex:0];
NSString *title = [titleElement stringValue];
//获取a,b,c,d节点的值
GDataXMLElement *aElement = [[question elementsForName:@"a"] objectAtIndex:0];
NSString *a = [aElement stringValue];
GDataXMLElement *bElement = [[question elementsForName:@"b"] objectAtIndex:0];
NSString *b = [bElement stringValue];
GDataXMLElement *cElement = [[question elementsForName:@"c"] objectAtIndex:0];
NSString *c = [cElement stringValue];
GDataXMLElement *dElement = [[question elementsForName:@"d"] objectAtIndex:0];
NSString *d = [dElement stringValue];
GDataXMLElement *parseElement = [[question elementsForName:@"parse"] objectAtIndex:0];
NSString *parse = [parseElement stringValue];
}
}