对于xml解析,只想说一句话,千万别用系统自带的解析器,否则,你会死的很惨! 

GDataXMLParser是一个对xml具有良好操作的第三方库。解析的方法如下:

步骤:
一、下载GDataXMLParser库,把解压后Source/XMLSupport/下的两个文件:GDataXMLNode.h和GDataXMLNode.m拖到工程中。
一、加入libxml2.dylib框架。
二、设置Search Paths中Header Search Paths为/usr/include/libxml2。
三、在文件中导入头文件:GDataXMLNode.h。

附件是GDataXMLNode.h和GDataXMLNode.m

test.xml

 
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <list> 
  3.     <item itemid = 'item1'> 
  4.         <user itemchild_id = 'user1'>张三</user> 
  5.         <psw itemchild_id = 'psw1'>123</psw> 
  6.     </item> 
  7.     <item itemid = 'item2'> 
  8.         <user itemchild_id = 'user2'>李四</user> 
  9.         <psw itemchild_id = 'psw2'>456</psw> 
  10.     </item> 
  11. </list> 

解析代码:

 
  1. NSMutableData *xmlData = [[NSMutableData alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"]]; 
  2. GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:nil]; 
  3. if (doc) { 
  4.     NSArray *items = [doc nodesForXPath:@"//list/item" error:nil]; 
  5.     for (GDataXMLElement *item in items) { 
  6.         //获得item的id 
  7.         NSLog(@"item.itemid = %@", [item attributeForName:@"itemid"].stringValue); 
  8.         NSArray *itemchildren = [item children]; 
  9.         for (GDataXMLElement *itemchild in itemchildren) { 
  10.             NSLog(@"itemchild.Name = %@", itemchild.name); 
  11.             NSLog(@"itemchild.String = %@", itemchild.stringValue); 
  12.             //id 
  13.             NSLog(@"itemchild.itemchild_id = %@", [itemchild attributeForName:@"itemchild_id"].stringValue); 
  14.         } 
  15.         NSLog(@"/*******/"); 
  16.     } 

打印结果: