2010-12-24 9 views
2

NSXMLParserを使用して、このXMLを解析しています:http://itunes.apple.com/gb/rss/topsongs/limit=50/explicit=true/xml。私は "im:image"という要素を解析しようとしています。私の問題は、「im:image」という名前の3つの要素があることです。 2番目の「im:image」のデータのみを解析するにはどうしたらよいですか、またはそれぞれの配列をどのように配列に追加できますか?カスタムデリゲートのdidStartElement方法でNSXMLParser 3つの同じ要素

答えて

1

attributesをチェックし、それが(「同じ」XML要素のそれぞれが異なるheight属性を持っている)60heightセットを持っていることを確認してください。 attributesNSDictionaryで、属性の名前と属性の値の値のキーがあります。ここでは、あなたがそれを行うだろう大体方法の例です:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    if ([[attributeDict objectForKey:@"height"] isEqualToString:@"60"]) { 
    NSLog(@"store"); 
    } 
} 
+0

おかげで(私は私の場合には第二の要素を探していました)。しかし、どうすればそれを保管することができますか? – MKDev

+0

好きなだけ保存してください。それを配列、セット、辞書に追加します。それはあなたがそれをどのように使用しているのか、それをどのように取得したいのかによって異なります。 –

+0

ありがとう、私はそれが見つかった文字メソッドではないので、このイメージのURLを得ることができますか? – MKDev

2

これはおそらくそれを行うための最善の方法はありませんが、このような何かが私に起こったとき、私は単純にcounterという名前NSIntegerを作成しました。その後didStartElementに私はこれをしなかった。このため

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

if([elementName isEqualToString:@"yweather:forecast"]) 
    { 
     int code = [[attributeDict objectForKey:@"code"] intValue]; 
     if (counter == 0) { 
     } 
     if (counter == 1) { 
      conditionCode = code; 
     } 
     counter ++; 
    } 
} 
+0

このアプローチの問題の1つは、生成されるXML文書に要素の順序が変更された場合(何らかの理由で)、異なる結果が生成されることです。通常、文書を自分で生成すると問題はありませんが、外部サービス(たとえば、iTunesデータなど)にアクセスするときにはリスクが発生します。 –

+0

私はそれが最良のアプローチではないことに同意しますが、ねえ!できます。 :) –

関連する問題