iOS中xml的解析之TouchXml

今天自己的任务是xml解析,其实网上有很多xml解析的类库,自己也不知道该选择哪一个好,最终选择touchXml解析xml感觉比较方便。下面介绍给大家。

一、首先要做的就是导入这个类库了。下载地址:https://github.com/TouchCode/TouchXML ,下载后导入到项目中。

二、导入Frameworks。libxml2.dylib添加到项目中。

三、在项目中配置。

点击项目右上方自己的项目,然后选择target下面的项目名字,选择Build Settings 后在窗口的搜索栏中输入 header search.然后双击

Header Search Paths 后面空白中输入/usr/include/libxml2 

在搜索框中输入other linker flags 。添加上字符-lxml2。然后command +B编译,success。

四、xml解析。这里网上的代码很多,粘贴过来个例子吧。用到的时候需要导入  #import "TouchXML.h" 

解析的源文件:

<books>
     <iphonebook>
       <id>01</id>
       <name>iPhoneDeveloper's</name>
       <page>123</page>
     </iphonebook>
     <iphonebook>
       <id>02</id>
       <name>ipadDeveloper's</name>
       <page>220</page>
     </iphonebook>
     <wp7book>
       <id>03</id>
       <name>wp7developer</name>
       <page>281 </page>
     </wp7book>
     <wp7book>
       <id>04</id>
       <name>windows phone 7</name>
       <page>300</page>
     </wp7book>
</books>- (void)viewDidLoad 
{
    //获得文件路径
    NSString *XMLPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"userInfo.xml"];
    //取得数据
    NSData *XMLData = [NSData dataWithContentsOfFile:XMLPath];
    //生成CXMLDocument对象
    CXMLDocument *document = [[CXMLDocument alloc] initWithData:XMLData options:0  error:nil  ];

 }

//直接查找

- (void) parseDire:(CXMLDocument *) document
{
    NSArray *books = NULL;
    books = [document nodesForXPath:@"//iphonebook" error:nil];
    for (CXMLElement *element in books)
    {
        if ([element isKindOfClass:[CXMLElement class]])
        {
            NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
            for (int i = 0; i < [element childCount]; i++)
            {
                if ([[[element children] objectAtIndex:i] isKindOfClass:[CXMLElement class]])
                {
                    [item setObject:[[element childAtIndex:i] stringValue]
                             forKey:[[element childAtIndex:i] name]
                     ];
                    NSLog(@"%@", [[element childAtIndex:i] stringValue]);
                }
            }
            //NSLog(@"%@", item);
        }
    }
    //
    books = [document nodesForXPath:@"//wp7book" error:nil];
    for (CXMLElement *element in books)
    {
        if ([element isKindOfClass:[CXMLElement class]])
        {
            NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
            for (int i = 0; i < [element childCount]; i++)
            {
                if ([[[element children] objectAtIndex:i] isKindOfClass:[CXMLElement class]])
                {
                    [item setObject:[[element childAtIndex:i] stringValue]
                             forKey:[[element childAtIndex:i] name]
                     ];
                    NSLog(@"%@", [[element childAtIndex:i] stringValue]);
                }
            }
            //NSLog(@"%@", item);
        }
    }
}

//从根节点解析

- (void) parseRoot:(CXMLDocument *) document
{
    CXMLElement *root = [document rootElement];
    NSArray *books = [root children];
    
    for (CXMLElement *element in books)
    {
        if ([element isKindOfClass:[CXMLElement class]])
        {
            NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
            for (int i = 0; i < [element childCount]; i++)
            {
                
                if ([[[element children] objectAtIndex:i] isKindOfClass:[CXMLElement class]])
                {
                    if ([[element name] isEqualToString:@"iphonebook"]) 
                    {
                        [item setObject:[[element childAtIndex:i] stringValue] forKey:[[element childAtIndex:i] name]];
                        NSLog(@"1%@", [[element childAtIndex:i] stringValue] );
                    }
                    if ([[element name] isEqualToString:@"wp7book"]) 
                    {
                        [item setObject:[[element childAtIndex:i] stringValue] forKey:[[element childAtIndex:i] name]];
                        NSLog(@"2%@", [[element childAtIndex:i] stringValue] );
                    }
                }
            }
            //NSLog(@"%@", item);
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值