iPhone如何使用NSXMLParser获取CDATA属性?

时间:2011-05-27 13:33:21

标签: ios objective-c iphone cocoa cocoa-touch

我想从在线XML解析XML,如下所示:

<menu maincategory="![CDATA[Erhverv]]" subcategory="![CDATA[Erhvervsregister]]" category="![CDATA[Akupunktur]]"/>

在我使用的函数解析器didStartElement中如下:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    if ([elementName isEqualToString:@"menu"]) {
        NSString *maincategory = [attributeDict objectForKey:@"maincategory"];
    }
}

使用%@:

输出如下所示
attributeDict:{
    category = "![CDATA[Advokater]]";
    maincategory = "![CDATA[Erhverv]]";
    subcategory = "![CDATA[Erhvervsregister]]";
}


2011-05-27 19:20:42.663 XML[62494:840b] maincategory using %s: `ãâå
2011-05-27 19:20:42.663 XML[62494:840b] maincategory using %@: ![CDATA[Erhverv]]

但我需要没有![CDATA]标签的输出

任何人都可以帮助我,我该如何解决? 提前致谢

1 个答案:

答案 0 :(得分:0)

我会使用NSRegularExpression对象发布attributeDict。对于字典中的每个字符串,将其复制到NSMutableString(在下面的代码中命名为theString)并运行此代码:

NSError *theError = nil;
NSRegularExpression *theExpression = [NSRegularExpression regularExpressionWithPattern:@"!\\[CDATA\\[(.*)\\]\\]" options:(NSRegularExpressionOptions)nil error:&theError];
NSUInteger count = [theExpression replaceMatchesInString:theString options:(NSRegularExpressionOptions)nil range:NSMakeRange(0, [theString length]) withTemplate:@"$1"];