Fork me on GitHub

TOUCHXML解析XML小结

 

iPad/iPhone与服务端进行数据交互,一般都是通过webservice实现的,而从服务端返回的数据一般是xml,在这里就使用touchXML来解析xml,为了简单,这里就直接解析xml文件.

准备:(xCode项目中加入对touchXML的支持)

操作步骤如下:

1、下载最新touchXML类库(下载);

2、将步骤1中的类库加入到xCode项目中,操作流程如下图所示:

 

 2-1

 

 2-2

 

 2-3

提示:在实际开发中,为了保证路径一致,而非引用,可以把Copy itmes into destination group’s folder(if needed)”选项打上勾.

 

3、因为TouchXML使用了libxml2,故需要首先添加libxml2 library(右击FrameworksàaddàExitting Frameworksàlibxml2.dylib),然后在工程编译选项中按如下操作:

 

 3-1{(Header Search Path)--(/usr/include/libxml2)}

 

 3-2{(Other Linker Flags)--(-lxml2)}

4、编写要解析的xml文件(userInfo.xml),源代码如下:

<users>

     <user>

       <id>CN0001</id>

       <name>张三</name>

       <gender>01</gender>

       <age>23</age>

     </user>

     <user>

       <id>CN0002</id>

       <name>张三</name>

       <gender>02</gender>

       <age>22</age>

     </user>

     <user>

       <id>CN0003</id>

       <name>张三</name>

       <gender>02</gender>

       <age>25</age>

     </user>

     <user>

       <id>CN0004</id>

       <name>张三</name>

       <gender>01</gender>

       <age>21</age>

     </user>

</users>

步骤5、编写解析xmlobjective-c源代码,如下是点击某个按钮事件触发解析事件:

#pragma mark -

#pragma mark user code

- (void) parseXML:(UIButton *) button

{   

     NSString *XMLPath = [[[NSBundle mainBundleresourcePath]

                     stringByAppendingPathComponent:@"userInfo.xml"

                      ];

     NSData *XMLData = [NSData dataWithContentsOfFile:XMLPath];

    

     CXMLDocument *document = [[CXMLDocument alloc]initWithData:XMLData

                                                 options:0

                                                   error:nil

                           ];

     //[self parseDire:document];

     [self parseRoot:document]; 

}

 

//方式一:直接查找

- (void) parseDire:(CXMLDocument *) document

{

     NSArray *users = NULL;

     users = [document nodesForXPath:@"//user" error:nil];

     for (CXMLElement *element in users)

     {

       if ([element isKindOfClass:[CXMLElement class]])

       {

           NSMutableDictionary *item = [[NSMutableDictionaryallocinit];

           for (int i = 0; i < [element childCount]; i++)

           {

              if ([[[element childrenobjectAtIndex:i]isKindOfClass:[CXMLElement class]])

              {

                  [item setObject:[[element childAtIndex:i]stringValue]

                          forKey:[[element childAtIndex:i] name]

                   ];

              }

           }

           NSLog(@"%@", item);

       }

     }

}

 

//方式二:从根节点查找

- (void) parseRoot:(CXMLDocument *) document

{

     CXMLElement *root = [document rootElement];

     NSArray *users = [root children];

    

     for (CXMLElement *element in users)

     {

       if ([element isKindOfClass:[CXMLElement class]])

       {

           NSMutableDictionary *item = [[NSMutableDictionaryallocinit];

           for (int i = 0; i < [element childCount]; i++)

           {

              if ([[[element childrenobjectAtIndex:i]isKindOfClass:[CXMLElement class]])

              {

                  [item setObject:[[element childAtIndex:i]stringValue]

                          forKey:[[element childAtIndex:i] name]

                   ];

              }

           }

           NSLog(@"%@", item);

       }

     }

}


posted on 2012-02-08 18:54  pengyingh  阅读(741)  评论(0)    收藏  举报

导航