例1:
// // main.m // IOS150625_ObjectiveC_XML文件解析 // // Created by PengJunlong on 15/6/25. // Copyright (c) 2015年 Peng Junlong. All rights reserved. // #import <Foundation/Foundation.h> #import "GdataxMLNode.h" //************************ //* XML文档解析 * //************************ //使用第三方库 //XML //由 <>开始,</>结束 //1.添加libxml2.dylib库,在build Phases中添加二进制库libxml2.dylib,//2.在build Setting中Search Path-->Header Search Path-->添加头文件路径/usr/include/libxml2 //3.添加GdataxMLNode库,将GdataxML文件中的GdataxMLNode.h和GdataxMLNode.m文件添加进工程中,在Build Phases-->Compile Source中修改GdataxMLNode.m文件为arc与mrc混合编程 -fno-objc-arc int main(int argc,const char * argv[]) { @autoreleasepool { NSData *xmlData = [NSData dataWithContentsOfFile:@"/Users/qianfeng/Public/ExerciseProject/IOS150625_ObjectiveC_XML文件解析1/IOS150625_ObjectiveC_XML文件解析/users.xml"]; //创建document对象 GdataxMLDocument *document = [[GdataxMLDocument alloc] initWithData:xmlData options:0 error:nil]; //获取根节点 GdataxMLElement *rootElement = [document rootElement]; NSArray *users = [rootElement elementsForName:@"Users"]; NSLog(@"%@",users); for (GdataxMLElement *user in users) { NSString *ID = [[user attributeForName:@"id"] stringValue]; NSLog(@"id = %@",ID); NSString *name = [[[user elementsForName:@"name"] firstObject] stringValue]; NSLog(@"name = %@",name); NSString *age = [[[user elementsForName:@"age"] firstObject] stringValue]; NSLog(@"age = %@",age); } } return 0; }
users.xml如下:
<?xml version = "1.0" encoding="utf-8"?> <Users> <User id="001"> <name>Ryan</name> <age>24</age> </User> <User id ="002"> <name>Tang</name> <age>23</age> </User> </Users>
例2: // // main.m // IOS150625_ObjectiveC_XML解析2 // // Created by PengJunlong on 15/6/25. // Copyright (c) 2015年 Peng Junlong. All rights reserved. // #import <Foundation/Foundation.h> #import "GdataxMLNode.h" int main(int argc,const char * argv[]) { @autoreleasepool { NSData *xmlData = [NSData dataWithContentsOfFile:@"/Users/qianfeng/Public/ExerciseProject/IOS150625_ObjectiveC_XML解析2/Student.xml"]; //创建XML document GdataxMLDocument *document = [[GdataxMLDocument alloc] initWithData:xmlData options:0 error:nil]; //获取根节点 GdataxMLElement *rootElement = [document rootElement]; NSString *class = [[rootElement attributeForName:@"class"] stringValue]; NSLog(@"class = %@",class); NSString *school = [[rootElement attributeForName:@"school"] stringValue]; NSLog(@"school = %@",school); NSArray *studentArray = [rootElement elementsForName:@"student"]; for (GdataxMLElement *student in studentArray) { NSString *sign = [[student attributeForName:@"sign"] stringValue]; if (sign) { NSLog(@"------%@------",sign); } else { NSLog(@"--------------"); } NSString *name = [[[student elementsForName:@"name"] firstObject] stringValue]; NSLog(@"name = %@",name); NSString *num = [[[student elementsForName:@"number"] firstObject] stringValue]; NSLog(@"number = %@",num); NSString *sex = [[[student elementsForName:@"sex"] firstObject] stringValue]; NSLog(@"sex = %@",sex); NSString *phone = [[[student elementsForName:@"phone"] firstObject] stringValue]; NSLog(@"phone = %@",phone); } } return 0; }
Student.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?> <Students class="17班" school="中国"> <student> <number>1</number> <name>胡明涛</name> <sex>男</sex> <phone>123558</phone> </student> <student> <number>2</number> <name>成风采</name> <sex>男</sex> <phone>122323</phone> </student> <student> <number>3</number> <name>陈咬金</name> <sex>男</sex> <phone>21313558</phone> </student> <student sign="非应届生"> <number>4</number> <name>天天下</name> <sex>男</sex> <phone>56453558</phone> </student> </Students>
例3: // // main.m // IOS150625_ObjectiveC_XML文件解析3 // // Created by PengJunlong on 15/6/25. // Copyright (c) 2015年 Peng Junlong. All rights reserved. // #import <Foundation/Foundation.h> #import "GdataxMLNode.h" int main(int argc,const char * argv[]) { @autoreleasepool { NSData *xmlData = [NSData dataWithContentsOfFile:@"/Users/qianfeng/Public/ExerciseProject/IOS150625_ObjectiveC_XML文件解析3/citys.xml"]; GdataxMLDocument *document = [[GdataxMLDocument alloc]initWithData:xmlData options:0 error:nil]; GdataxMLElement *rootElement = [document rootElement]; //XPath //相对路径:从当前节点计算的路径 //绝对路径:从根节点计算的路径 //从当前路径下获取所有节点(相对路径) NSArray *cityNames = [rootElement nodesForXPath:@"./cities/city/name" error:nil]; for (GdataxMLElement *name in cityNames) { NSString *nameString = [[name attributeForName:@"data"] stringValue]; NSLog(@"cityName = %@",nameString); } NSArray *city = [rootElement nodesForXPath:@"./cities/city" error:nil]; for (GdataxMLElement *name in city) { NSString *defaultStr = [[name attributeForName:@"default"] stringValue]; if (defaultStr) { NSLog(@"-------default = %@---------",defaultStr); } NSString *nameString = [[[[name elementsForName:@"name"] firstObject] attributeForName:@"data"] stringValue]; NSLog(@"nameString = %@",nameString); NSString *latitude_e6 = [[[name elementsForName:@"latitude_e6"] firstObject] stringValue]; NSLog(@"latitude_e6 = %@",latitude_e6); NSString *longitude_e6 = [[[name elementsForName:@"longitude_e6"] firstObject] stringValue]; NSLog(@"longitude_e6 = %@",longitude_e6); } // NSLog(@"cityName = %@",cityNames); } return 0; }
citys.xml文件如下:
<pre name="code" class="html"><?xml version="1.0"?> <xml_api_reply version="1"> <cities> <city> <name data="保定"/> <latitude_e6> 38849998</latitude_e6> <longitude_e6> 115569999</longitude_e6> </city> <city default="true" > <name data="北京"/> <latitude_e6> 39930000</latitude_e6> <longitude_e6> 116279998</longitude_e6> </city> <city> <name data="沈阳"/> <latitude_e6> 41770000</latitude_e6> <longitude_e6> 123430000</longitude_e6> </city> <city> <name data="成都"/> <latitude_e6> 30670000</latitude_e6> <longitude_e6> 104019996</longitude_e6> </city> <city> <name data="大连"/> <latitude_e6> 38900001</latitude_e6> <longitude_e6> 121629997</longitude_e6> </city> <city> <name data="福州"/> <latitude_e6> 26079999</latitude_e6> <longitude_e6> 119279998</longitude_e6> </city> <city> <name data="阜阳"/> <latitude_e6> 32930000</latitude_e6> <longitude_e6> 115830001</longitude_e6> </city> <city> <name data="赣州"/> <latitude_e6> 25850000</latitude_e6> <longitude_e6> 114949997</longitude_e6> </city> <city> <name data="广州"/> <latitude_e6> 23129999</latitude_e6> <longitude_e6> 113319999</longitude_e6> </city> <city> <name data="贵阳"/> <latitude_e6> 26579999</latitude_e6> <longitude_e6> 106720001</longitude_e6> </city> <city> <name data="哈尔滨"/> <latitude_e6> 45750000</latitude_e6> <longitude_e6> 126769996</longitude_e6> </city> <city> <name data="海口"/> <latitude_e6> 20030000</latitude_e6> <longitude_e6> 110349998</longitude_e6> </city> <city> <name data="邯郸"/> <latitude_e6> 38029998</latitude_e6> <longitude_e6> 114419998</longitude_e6> </city> <city> <name data="杭州"/> <latitude_e6> 30229999</latitude_e6> <longitude_e6> 120169998</longitude_e6> </city> <city> <name data="合肥"/> <latitude_e6> 31870000</latitude_e6> <longitude_e6> 117230003</longitude_e6> </city> <city> <name data="菏泽"/> <latitude_e6> 36119998</latitude_e6> <longitude_e6> 114370002</longitude_e6> </city> <city> <name data="衡阳"/> <latitude_e6> 36119998</latitude_e6> <longitude_e6> 114370002</longitude_e6> </city> </cities> </xml_api_reply>
例4: // // main.m // IOS150625_ObjectiveC_XML文件解析4 // // Created by PengJunlong on 15/6/25. // Copyright (c) 2015年 Peng Junlong. All rights reserved. // #import <Foundation/Foundation.h> #import "GdataxMLNode.h" int main(int argc,const char * argv[]) { @autoreleasepool { NSData *xmlData = [NSData dataWithContentsOfFile:@"/Users/qianfeng/Public/ExerciseProject/IOS150625_ObjectiveC_XML文件解析4/qfile.xml"]; GdataxMLDocument *document = [[GdataxMLDocument alloc] initWithData:xmlData options:0 error:nil]; GdataxMLElement *rootElement = [document rootElement]; GdataxMLElement *keyToCity = [[rootElement nodesForXPath:@"./dict" error:nil] firstObject]; NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithCapacity:20]; NSArray *keys = [keyToCity elementsForName:@"key"]; NSArray *citys =[keyToCity elementsForName:@"array"]; for (int i=0; i<[keys count]; i++) { NSArray *cities = [[citys objectAtIndex:i] elementsForName:@"string"]; [dict setObject:cities forKey:[[keys objectAtIndex:i] stringValue]]; } char ch[20]={}; printf("输入城市名:"); scanf("%s",ch); NSString *cityNameCh = [NSString stringWithUTF8String:ch]; for (NSString *key in dict) { NSArray *cityName = [dict objectForKey:key]; for (GdataxMLElement *city in cityName) { if ([[city stringValue]isEqualToString:cityNameCh]) { NSLog(@"Key = %@",key); } } } } return 0; }
文件格式如下:
<pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>a</key> <array> <string>安吉</string> <string>安庆</string> <string>鞍山</string> <string>澳门</string> </array> <key>b</key> <array> <string>保定</string> <string>宝鸡</string> <string>包头</string> <string>北海</string> <string>北京</string> <string>蚌埠</string> <string>滨州</string> </array> <key>c</key> <array> <string>沧州</string> <string>长春</string> <string>常德</string> <string>长乐</string> <string>长沙</string> <string>常熟</string> <string>常州</string> <string>潮阳</string> <string>潮州</string> <string>承德</string> <string>成都</string> <string>郴州</string> <string>重庆</string> <string>滁州</string> <string>慈禧</string> <string>从化</string> </array> </dict> </plist>