【问题标题】:Trying to parse an RSS feed but missing 1 part尝试解析 RSS 提要但缺少 1 部分
【发布时间】:2011-07-15 15:45:54
【问题描述】:

我正在尝试解析 RSS 提要。我可以解析 BBC 的提要。但是当我尝试解析独立的提要时,我无法捕捉到我需要的图像的链接。 (饲料来源为:http://www.independent.co.uk/sport/football/premier-league/rss) 这是提要的摘录。它的 1 项。

<item>
<title>Juventus join race to sign Carlos Tevez claim Corinthians</title>
<guid>http://www.independent.co.uk/sport/football/transfers/juventus-join-race-to-sign- 
carlos-tevez-claim-corinthians-2314261.html</guid>  
<link>http://www.independent.co.uk/sport/football/transfers/juventus-join-race-to-sign- 
carlos-tevez-claim-corinthians-2314261.html</link>
<description>
<img src="http://www.independent.co.uk/multimedia/dynamic/00623/tevez_623081k.jpg"  
style="padding-right:5px;margin-right:5px" align="left" >
<p>
Corinthians president Andres Sanchez claims Juventus have entered the race to 
sign Carlos Tevez but insists his own club will not increase their offer for 
the want-away Argentinian.
</p> </description>
<category>Transfers</category>
<pubDate>Fri, 15 Jul 2011 10:46:12   +0100</pubDate>
</item>

问题在于提取“img src=”,因为我希望显示缩略图的 url。

我正在使用 NSXMLParser 解析 rss 提要,并在下面的代表中进行解析。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI  qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{

if(nil != qualifiedName)
{
    elementName = qualifiedName;
}
if ([elementName isEqualToString:@"item"]) 
{
    self.currentItem = [[[BlogRss alloc]init]autorelease];
}
else if ([elementName isEqualToString:@"media:thumbnail"]) 
{
    self.currentItem.mediaUrl = [attributeDict valueForKey:@"url"];
}   
else if([elementName isEqualToString:@"title"] || [elementName isEqualToString:@"link"] || [elementName isEqualToString:@"guid"] || [elementName isEqualToString:@"pubDate"]) 
{
    self.currentItemValue = [NSMutableString string];

} 
else if ([elementName isEqualToString:@"description"] )
{
    self.currentItemValue = [NSMutableString string];
} 
else 
{
    self.currentItemValue = nil;
}   
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
 {
if(nil != qName)
{
    elementName = qName;
}
if([elementName isEqualToString:@"title"])
{
    self.currentItem.title = self.currentItemValue;
}
else if([elementName isEqualToString:@"description"])
{
    self.currentItem.description = self.currentItemValue;
}
else if([elementName isEqualToString:@"link"])
{
    self.currentItem.linkUrl = self.currentItemValue;
}
else if([elementName isEqualToString:@"guid"])
{
    self.currentItem.guidUrl = self.currentItemValue;
}
else if([elementName isEqualToString:@"pubDate"])
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
     self.currentItem.pubDate = [NSDate dateFromInternetDateTimeString:self.currentItemValue formatHint:DateFormatHintRFC822];
    [formatter release];
}
else if([elementName isEqualToString:@"item"])
{
    [[self rssItems] addObject:self.currentItem];
}
}

我已经 NSLog'd 了

    else if([elementName isEqualToString:@"description"])
{
    self.currentItem.description = self.currentItemValue;
}

self.currentItemValue 的内容,它不包含任何img url 文本。

我错过了什么。它是不是有效的 XML,所以使用 NSXMLParser 对我来说永远不起作用?

非常感谢, -代码

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

    我建议在 NSXMLParser 周围使用 XML 包装器。

    我使用的是TouchXML,但还有其他几个。

    给定一个 xPath(//在您的情况下为项目);包装器将为您提供NSDictionary,因此您可以使用NSDictionaryvalueForKey: 方法检索值。

    这比为您的特定类创建自定义解析器更容易且可重用。

    【讨论】:

    • 好的,我可以将 TouchXML 插入到项目中,代替我使用 NSXMLParser 的所有地方,然后访问您提到的附加功能,而不会失去我为实现这一目标所做的工作吗?感谢您的建议泽布斯
    • @Code:This是我学习Touch XML使用的教程,非常简单直接,google TouchXML教程应该会有更新的,应该可以替换这很容易,特别是如果您遵循 MVC 约定。
    猜你喜欢
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多