iOS Parse RSS Feed检索dc:创建者标签最近由CDATA附上

时间:2013-11-01 03:37:26

标签: ios iphone objective-c nsxmlparser cdata

我有一个解析WordPress默认RSS源的iPhone应用程序。它正在解析各种标签,包括title,pubDate,dc:creator和link。

dc:creator标签曾经如下所示。我还没有更新的Wordpress网站仍然显示如下标签:

<dc:creator>Andy RR</dc:creator>

我正在使用NSXMLParser。我能够使用didStartElement方法中的以下代码成功获取此文本:

if ([elementName isEqual:@"dc:creator"])
    {
        currentString = [[NSMutableString alloc] init];
        [self setCreator:currentString];
    }

但是使用更新后的WordPress网站,http://sitename.com/feed下的默认Feed会显示CDATA中包含的dc:creator标记,如下所示:

<dc:creator>
<![CDATA[ Andy RR ]]>
</dc:creator>

所以前面的代码没有在dc:creator中获取文本,因为它现在包含在CDATA块中。

现在我想在dc:creator下获得这个CDATA块。我可以使用NSXMLParser的以下方法:

-(void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock
{
    currentString = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
    NSLog(@"CDaTa text %@", currentString);
}

但问题是这个方法从其他标签中获取CDATA的所有文本,这些标签也包含在CDATA标签下。除了dc:creator之外,还有其他标签,如“category”和“description”,它们也包含CDATA块下的文本。

我想要的是NSXMLParser的foundCDATA方法如何才能获得dc:creator标签下的文本,并忽略其他CDATA标签,如类别和描述。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

使用以下方法解决了我自己:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
     if ([elementName isEqual:@"dc:creator"])
     {
          currentString = [[NSMutableString alloc] init];
          [self setCreator:currentString];
    }
}

并且在NSXMLParser的cdata方法中,只需附加字符串:

    -(void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock
    {
          NSString *someString1 = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
         [currentString appendString:someString1];
    }