XML 解析
首先要导入Gdata,添加库libxml2,在Header Search Paths里写入/usr/include/libxml2,GDataXMLDocument获取指针,GDataXMLElement获取根节点 xpath:用指针调用 nodesForXPath方法即可
//获取文件路径 NSString* path = [[NSBundle mainBundle] pathForResource:@"xml" ofType:@"txt"]; //获得文件内容 NSString* xmlStr = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; //<CityName>北京</CityName> //name:CityName value:北京 //<Item key="1" value="A"></Item> //名称 值 属性 属性 ....... //CityName 北京 //Item key="1" value="A" //属性名称 属性值 // key 1 //value A /* <root> <systemConfig> <CityName>北京</CityName> <CityCode>201</CityCode> <ParentCityCode> 0</ParentCityCode> <areaCode>010</areaCode> <AgreementUrl></AgreementUrl> <IntentionLevel> <Item key="1" value="A"></Item> <Item key="2" value="B">BBB</Item> <Item key="3" value="C"></Item> */ //开始GData解析 GDataXMLDocument* xmlDoc = [[GDataXMLDocument alloc] initWithXMLString:xmlStr options:0 error:nil]; //XPath // /root/systemConfig/CityName GDataXMLElement* cityName = [[xmlDoc nodesForXPath:@"/root/systemConfig/CityName" error:nil] objectAtIndex:0]; NSLog(@"%@",cityName.stringValue); /* //相对路径 | 多路径 [1] 拿出第一个 [last()-1] 拿出倒数第二个 [position() < 3] 拿出前两个元素 [@key] 返回节点必定有属性叫key [@key=2] 拿出key==2的节点 [@key>1] 拿出key>1的节点 */ //<Item key="1" value="A"/> //<Item key2="1" value2="A"/> //Item NSArray* array = [xmlDoc nodesForXPath:@"//IntentionLevel/Item[@value='B']" error:nil]; for (GDataXMLElement* itemEle in array) { NSLog(@"%@",itemEle.stringValue); NSLog(@"%@",itemEle.XMLString); NSLog(@"%@",itemEle.name); for (GDataXMLElement *attEle in itemEle.attributes) { NSLog(@"---%@",attEle.XMLString); NSLog(@"----%@",attEle.name); } }
输出日志:
2013-03-13 00:59:40.038 xmlDemo[1562:c07] 北京 2013-03-13 00:59:40.039 xmlDemo[1562:c07] BBB 2013-03-13 00:59:40.040 xmlDemo[1562:c07] <Item key="2" value="B">BBB</Item> 2013-03-13 00:59:40.040 xmlDemo[1562:c07] Item 2013-03-13 00:59:40.041 xmlDemo[1562:c07] ---key="2" 2013-03-13 00:59:40.041 xmlDemo[1562:c07] ----key 2013-03-13 00:59:40.041 xmlDemo[1562:c07] ---value="B" 2013-03-13 00:59:40.042 xmlDemo[1562:c07] ----value