使用Gdata解析xml

前端之家收集整理的这篇文章主要介绍了使用Gdata解析xml前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转载自:点击打开链接

@GdataxMLNode是Google提供的用于XML数据处理的类集。该类集对libxml2-DOM处理方式进行了封装能对较小或中等的XML文档进行读写操作且支持XPath语法。

1.http://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/XMLSupport/,获得GdataxMLNode.h和GdataxMLNode.m文件,进行如下操作将文件导入到Xcode的工程中:

2.将GdataxMLNode.h/m文件添加到工程中;

3.向工程中增加“libxml2.dylib”库;

4.在工程的“Build Settings”页中找到“Header Search Path”项,添加/usr/include/libxml2”到其路径


5.搜索框中搜索Other linker flags,同样的方式添加-lxml2



@代码示例:

首先在工程中新建一个xml文件,作为我们要解析的对象,新建方法是在工程中新建一个Empty的文件,命名为Student.txt(可以命名为.xml,这个随意),然后添加内容

[html] view plain copy
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <Studentsclass="17班"school="中国">
  3. student>
  4. number>1</name>胡明涛sex>phone>123558>2>成风采>122323>3>陈咬金>21313558studentsign="非应届生">4>天天下>56453558Students>

[objc]
    #pragmamark-GdataxMLNode
  1. -(void)onClickGdataxMLButton{
  2. //获取工程目录的xml文件
  3. NSData*xmlData=[NSDatadataWithContentsOfFile:[[NSBundlemainBundle]pathForResource:@"Student"ofType:@"txt"]];
  4. //从文档中读出完整的XML数据,在内存中形成完整的树形结构
  5. NSError*error=nil;
  6. GdataxMLDocument*documents=[[GdataxMLDocumentalloc]initWithData:xmlDataoptions:0error:&error];
  7. //取得根节点(element元素)---Students
  8. GdataxMLElement*rootEL=[documentsrootElement];
  9. //获取根节点下的节点,返回的数组---student
  10. NSArray*studentsArray=[rootELelementsForName:@"student"];
  11. for(inti=0;i<[studentsArraycount];i++){
  12. //获取单个节点对象
  13. GdataxMLElement*student=[studentsArrayobjectAtIndex:i];
  14. //获取student节点下name,number,sex,phone节点的值
  15. GdataxMLElement*nameElement=[[studentelementsForName:@"name"]lastObject];
  16. GdataxMLElement*sexElement=[[studentelementsForName:@"sex"]lastObject];
  17. GdataxMLElement*numberElement=[[studentelementsForName:@"number"]lastObject];
  18. GdataxMLElement*phoneElement=[[studentelementsForName:@"phone"]lastObject];
  19. NSString*name=[nameElementstringValue];
  20. NSString*number=[numberElementstringValue];
  21. NSString*sex=[sexElementNSString*phone=[phoneElement//读标签里面的属性(attributeForName)
  22. NSString*sign=[[studentattributeForName:@"sign"]stringValue];
  23. if(sign){
  24. NSLog(@"----------%@",sign);
  25. }
  26. NSLog(@"%@,%@,%@",name,phone);
  27. }
  28. #pragmamark通过路径,取得指定的节点值,所有节点中同一标签的值
  29. //一个是相对路径,一个是绝对路径-----------(nodesForXPath)
  30. //NSArray*nameArray=[rootELnodesForXPath:@"//name"error:nil];
  31. NSArray*nameArray=[rootELnodesForXPath:@"student/name"error:nil];
  32. inti=0;i<[nameArrayNSString*name=[[nameArrayobjectAtIndex:i] NSLog(@"---%@",name);
  33. }


    xmlversion="1.0"xml_api_replyversion="1"citiescitynamedata="保定"/>
  1. latitude_e6>38849998longitude_e6>115569999citydefault="true"namedata="北京"/>
  2. >39930000>116279998namedata="沈阳">41770000>123430000namedata="成都">30670000>104019996namedata="大连">38900001>121629997namedata="福州">26079999>119279998namedata="阜阳">32930000>115830001namedata="赣州">25850000>114949997namedata="广州">23129999>113319999namedata="贵阳">26579999>106720001namedata="哈尔滨">45750000>126769996namedata="海口">20030000>110349998namedata="邯郸">38029998>114419998namedata="杭州">30229999>120169998namedata="合肥">31870000>117230003namedata="菏泽">36119998>114370002namedata="衡阳"xml_api_reply>

    #pragmamark-解析citys
  1. void)parseCitys{
  2. NSData*xmlCitysData=[NSDatapathForResource:@"citys"ofType:@"xml"]];
  3. //从文档中读取完成的XML文档,在内存中形成完整的树形结构
  4. nil;
  5. alloc]initWithData:xmlCitysDataerror:&error];
  6. //取得根节点
  7. GdataxMLElement*rootNode=[documentsrootElement];
  8. #pragmamark获取根节点xml_api_reply的数组,包含的是cities
  9. NSArray*citiesArray=[rootNodeelementsForName:@"cities"];
  10. inti=0;i<[citiesArraycount];i++){
  11. //取得单个cities节点
  12. GdataxMLElement*cities=[citiesArrayobjectAtIndex:i];
  13. #pragmamark获取节点cities的数组,包含的是city
  14. NSArray*cityArray=[citieselementsForName:@"city"];
  15. intj=0;j<[cityArraycount];j++){
  16. //取得单个city节点
  17. GdataxMLElement*city=[cityArrayobjectAtIndex:j];
  18. #pragmamarkcity节点下面是3个并行的节点,都是1个,直接通过lastObject来取得想要的值
  19. NSString*name=[[[[cityelementsForName:@"name"]lastObject]attributeForName:@"data"] NSLog(@"name=%@",153); font-weight:bold; background-color:inherit">NSString*latitude_e6=[[[cityelementsForName:@"latitude_e6"]lastObject] NSLog(@"latitude_e6=%@",latitude_e6);
  20. NSString*longitude_e6=[[[cityelementsForName:@"longitude_e6"]lastObject] NSLog(@"longitude_e6=%@",longitude_e6);
  21. }

猜你在找的XML相关文章