Использование NSXMLParser с CDATA

Я анализирую RSS-канал с NSXMLParser, и он хорошо работает для заголовка и других строк, но один из элементов - это изображение, которое похоже на

<!CDATA <a href="http:image..etc> 

Как мне добавить это как изображение моей ячейки в виде таблицы? Я определил бы это как тип изображения?

Вот что я использую для анализа:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{            
//NSLog(@"found this element: %@", elementName);
currentElement = [elementName copy];
if ([elementName isEqualToString:@"item"]) {
    // clear out our story item caches...
    item = [[NSMutableDictionary alloc] init];
    currentTitle = [[NSMutableString alloc] init];
    currentDate = [ [NSMutableString alloc] init];
    currentSummary = [[NSMutableString alloc] init];
    currentLink = [[NSMutableString alloc] init];
}

}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{     
//NSLog(@"ended element: %@", elementName);
if ([elementName isEqualToString:@"item"]) {
    // save values to an item, then store that item into the array...
    [item setObject:currentTitle forKey:@"title"];
    [item setObject:currentLink forKey:@"link"];
    [item setObject:currentSummary forKey:@"description"];
    [item setObject:currentDate forKey:@"date"];

    [stories addObject:[item copy]];
    NSLog(@"adding story: %@", currentTitle);
}

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
//NSLog(@"found characters: %@", string);
// save the characters for the current item...
if ([currentElement isEqualToString:@"title"]) {
    [currentTitle appendString:string];
} else if ([currentElement isEqualToString:@"link"]) {
    [currentLink appendString:string];
} else if ([currentElement isEqualToString:@"description"]) {
    [currentSummary appendString:string];
} else if ([currentElement isEqualToString:@"pubDate"]) {
    [currentDate appendString:string];
}

}

Ответы на вопрос(2)

Решение Вопроса

что все, что в нем находится, не рассматривается как часть XML-документа. Поэтому, если у вас есть теги в CDATA, парсер их игнорирует.

Я предполагаю, что этот CDATA находится в элементе описания. Таким образом, вам нужно извлечь теги из "описания" элемент, либо вручную, либо через другой экземпляр синтаксического анализатора.

 Xcoder08 июл. 2009 г., 04:37
Да, там есть URL изображения. Как я могу извлечь URL изображения с помощью NSXMLParser?
 08 июл. 2009 г., 05:32
Посмотрите на строку внутри раздела CDATA. Если это всегда допустимый xml, запустите другой экземпляр NSXMLParser наthat строка. Если это не правильный XML, вам придется что-то сделать, например, найти тег вручную.
 15 мар. 2012 г., 09:01
CMS, такие как Wordpress, имеют описание в тегах CDATA. Скорее всего, кодировщику Iphone будет предложено отобразить текст описания в части приложения для чтения RSS, как это делают все программы чтения RSS. Ответ GabrielN - это решение.

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock
{
    NSString *someString = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
}
 25 июн. 2010 г., 08:15
Это прекрасно работает. Если вам нужно разобрать дальше, просто создайте еще один парсер.
 21 апр. 2017 г., 12:48
@ Габриэль Пожалуйста, смотрите мой вопросstackoverflow.com/questions/43539307/…, Как я могу использовать ваш код услышать
 15 мар. 2012 г., 09:04
Это будет ответом для большинства, кто ищет это, чтобы получить работу. Совершенно не очевидно, что initWithData выдаст допустимую строку из найденных NSData, но, конечно, когда вы ее видите, вы переходите к "doh!". :) Работал у меня +1.

Ваш ответ на вопрос