0

我有一个解析 WordPress 默认 RSS 提要的 iPhone 应用程序。它正在解析各种标签,包括标题、pubDate、dc:creator 和链接。

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 下找到的默认提要显示包含在 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 之外,还有其他标签,如“类别”和“描述”,它们的文本也包含在 CDATA 块下。

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

4

1 回答 1

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];
    }
于 2013-11-05T04:07:53.277 回答