2011-07-15 8 views
0

RSSフィードを解析しようとしています。私はBBCのフィードを解析することができます。しかし、私が独立した人のフィードを解析しようとすると、私は必要なイメージへのリンクをキャッチできません。 (飼料源:http://www.independent.co.uk/sport/football/premier-league/rss) ここに飼料からの抽出物があります。その1項目。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> 

問題は、サムネイル画像へのURLを表示したいので、「img src =」を抽出しています。

私はRSSフィードをNSXMLParserで解析し、次の代理人で解析しています。

- (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]; 
} 
} 

私はself.currentItemValueの

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

内容をNSLog'dたのだが、IMGのURLテキストのいずれかが含まれていません。

私が紛失していることは何ですか?それはNSXMLParserを使用して私のために決して役に立たないので、有効なXMLですか?

多くのおかげで、 -code

答えて

0

私はNSXMLParser周りXMLラッパーを使用することをお勧めします。

私が使用しているものはTouchXMLですが、他にもいくつかあります。

与えられたxPath(あなたの場合はitem)。ラッパーはNSDictionaryを提供するので、valueForKey:メソッドNSDictionaryを使用して値を取得できます。

特定のクラスのカスタムパーサーを作成するよりも簡単で再利用可能です。

+0

私はNSXMLParserを使用したすべての場所の代わりにプロジェクトにTouchXMLをプラグインして、これまでに行った作業を失うことなく記述した追加機能にアクセスできますか?あなたのアドバイスをありがとうZebs –

+1

@コード:[This](http://dblog.com.au/general/iphone-sdk-tutorial-building-an-advanced-rss-reader-using-touchxml-part-1/)タッチXMLを使用する方法を学ぶのに使用したチュートリアルです。これはかなりシンプルでわかりやすいものです.Google TouchXMLチュートリアルの場合は新しいものが必要です。MVC規約に準拠すれば、かなり簡単に置き換えることができます。 – Zebs

+0

ありがとうございました。 ;) –

関連する問題