2010-12-24 4 views
2

NSXMLParser를 사용하여이 XML을 구문 분석합니다. http://itunes.apple.com/gb/rss/topsongs/limit=50/explicit=true/xml. "im : image"라는 요소를 파싱하려고합니다. 내 문제는 "im : image"라는 이름의 세 가지 요소가 있다는 것입니다. 어떻게하면 두 번째 "im : image"의 데이터 만 구문 분석 할 수 있습니까? 아니면 어떻게 각 단일 배열을 배열에 추가 할 수 있습니까? 맞춤 대리인의 didStartElement 방법에NSXMLParser 세 가지 동일한 요소

답변

1

, attributes을 확인하고 60height 세트합니다 ('동일'XML 요소 각각은 서로 다른 높이 특성을 갖는)가 있는지 확인. attributes은 속성 이름과 속성 값에 대한 키를 포함하는 NSDictionary입니다. 여기에 약 당신이 그것을 할 것입니다 방법의 예입니다 :

- (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

이 그것을 할 수있는 가장 좋은 방법은 아닐 것입니다,하지만 이런 일이 나에게 일어 났을 때 나는 단순히 NSIntegercounter라는 만들었습니다. 그렇다면 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

이 접근법의 문제점 중 하나는 생성되는 XML 문서가 (어떤 이유로 든) 요소의 순서가 변경되면 다른 결과를 생성한다는 것입니다. 일반적으로 문서를 직접 생성해도 문제가되지 않지만 외부 서비스 (예 : iTunes 데이터)에 액세스 할 때는 위험 할 수 있습니다. –

+0

나는 그것이 최선의 방법이 아니라는 것에 동의하지만, 이봐! 그것은 작동합니다. :) –

관련 문제