解析XML

虽然现在大多用JSON很少用到XML,但是也是很有必要懂得XML的相关用法,编程的道路是趋向深度和广度的,共勉.

笔者使用NSXMLParser来完成对XML的解析.首先,需要创建NSXMLParser对象.

 NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData: obj.messageData];
                [xmlParser setDelegate:self];
                [xmlParser setShouldResolveExternalEntities:YES];
                [xmlParser parse];

然后应该实现NSXMLParserDelegate的相应方法,这就根据后台确定的格式来做接下来的工作.这里讲述后台返回的是一个以properties节点开始的包含数组的内容.

在解析开始方法中,遍历获取子节点

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
    _storedAllKeys =YES;
    _keyName = elementName;

    if ([elementName isEqualToString:@"properties"]) {
        _propertiesMark = YES;

    }
}
然后寻找数组中对应的子节点内容,比如:name value ,分别为一个用得到属性的键 /值,现在需要获取他们并将其设置为字典类型,因为为数组中提取,所以在一个可变字典类型中添加相应的键/值

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if (_storedAllKeys) {
        if (_propertiesMark) {
            if ([_keyName isEqualToString:@"name"]) {
                [_messageParseDic setObject:@"" forKey:string];
                _objKey = string;
            }else if ([_keyName isEqualToString:@"value"]){
                [_messageParseDic setObject:string forKey:_objKey];
            }
        }
    }
}
当数组中每次遍历一次,会执行一次

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullableNSString *)namespaceURI qualifiedName:(nullableNSString *)qName;方法,但是当遍历到对应的数组节点开始对应的结束节点时,就是已执行完全部遍历.接着就应该做相应的工作了.

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    _storedAllKeys = NO;
    if ([elementName isEqualToString:@"properties"]) {
       _propertiesMark = NO;
       _messagedlx.properties = _messageParseDic;
       NSString *avatorStr =[ _messagedlx.properties objectForKey:@"from_img "];
       _messagedlx.avatarUrl = avatorStr;
       [self.chatFakeMessages addObject:_messagedlx];
    }
}

总的来说,解析XML主要按照上诉的三个方法,但是具体问题还是要具体对待.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值