IPhone开发中,用libxml2解析xml字符串

首先添加libxml2.dylib到工程中,再导入头文件,#include <libxml/xmlreader.h>

再加入如下代码:

-(NSMutableArray*)parser:(NSString*)xmlStr{
    //解析xml
    NSData *xmlData = [xmlStr dataUsingEncoding:NSUTF8StringEncoding];
xmlTextReaderPtr reader = xmlReaderForMemory([xmlData bytes], 
                                                 [xmlData length], 
                                                 NULL, nil, 
                                                 (XML_PARSE_NOBLANKS | XML_PARSE_NOCDATA | XML_PARSE_NOERROR | XML_PARSE_NOWARNING));
if (!reader) {
NSLog(@"Failed to load xmlreader");
return;
}
NSString *currentTagName = nil;
NSDictionary *currentPerson = nil;
NSString *currentTagValue = nil;
NSMutableArray *advertiseMArray = [NSMutableArray array];
char* temp;
while (true) {
if (!xmlTextReaderRead(reader)) break;
switch (xmlTextReaderNodeType(reader)) {
case XML_READER_TYPE_ELEMENT:
// starting an element
temp =  (char*)xmlTextReaderConstName(reader);
currentTagName = [NSString stringWithCString:temp 
                                                    encoding:NSUTF8StringEncoding];
if ([currentTagName isEqualToString:@"元素信息"]) {
currentPerson = [NSMutableDictionary dictionary];
[advertiseMArray addObject:currentPerson];
                }
                
continue;
case XML_READER_TYPE_TEXT:
//The current tag has a text value, stick it into the current 
temp = (char*)xmlTextReaderConstValue(reader);
currentTagValue = [NSString stringWithCString:temp 
                                                     encoding:NSUTF8StringEncoding];
                
                if (!currentPerson) return;
                
                [currentPerson setValue:currentTagValue forKey:currentTagName];
                currentTagValue = nil;
currentTagName = nil;                              
                
            default: continue;
}
}
    

    // NSLog(@"%@:%s Final data: %@", [self class], _cmd, advertiseMArray );
    
    return advertiseMArray;
}


这里返回的是一个mutableArray类型的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值