2014-04-14 3 views
0

사용하여 콘텐츠를 구문 분석노드 앵커 태그와 나는 "비교"내부의 HTML 태그를 구문 분석 할 NSXMLParse

<comparison> 
    <a href="/cgi-bin/amazon.cgi?B0050AMJYU">Amazon.com</a> 
    ($34.36) | 
    <a href="/cgi-bin/walmart.cgi?16904483">Walmart.com</a> 
    ($34.36) | 
    <a href="/cgi-bin/rakuten.cgi?219782579">Rakuten.com</a> 
    ($34.36) | 
    <a href="/cgi-bin/bestbuy1.cgi?mp1307815397">BestBuy.com</a> 
    ($34.36) 
</comparison> 

내가 무엇입니까 출력은 다음과 같습니다

BestBuy.com ($34.36) 

예상 출력 :

Amazon.com ($34.36) 
Walmart.com ($34.36) 
Rakuten.com ($34.36) 
BestBuy.com ($34.36) 

그러나 네 가지 항목을 모두 표시하고 싶습니다.

CODE 당신이 commentsArray라는 NSMutableArrayDealsParsingObjects 클래스가 나타납니다

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    currentElementValue = [NSMutableString string]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    if ([elementName isEqualToString:@"item"]) { 
     dealsListObj = [[DealsParsingObjects alloc] init]; 
    } 

} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    [currentElementValue appendString:string]; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
    if ([elementName isEqualToString:@"short_title"]) { 
     dealsListObj.itemTitle = currentElementValue; 
     currentElementValue = nil; 
    } 
    else if ([elementName isEqualToString:@"final_price"]) { 
     dealsListObj.price = currentElementValue; 
     currentElementValue = nil; 
    } 
    //Detail view 
    else if ([elementName isEqualToString:@"merchant"]) { 
     dealsListObj.itemMerchant = currentElementValue; 
     currentElementValue = nil; 
    } 
    else if ([elementName isEqualToString:@"getdeal"]) { 
     dealsListObj.itemGetDeal = currentElementValue; 
     currentElementValue = nil; 
    } 
    //comparison 
    else if ([elementName isEqualToString:@"comparison"]) { 
     dealsListObj.comparison = currentElementValue; 
     currentElementValue = nil; 

    } 
    else if ([elementName isEqualToString:@"item"]) { 
     [resultArray addObject:dealsListObj]; 
     [dealsListObj release]; 
     dealsListObj = nil; 
     currentElementValue = nil; 
    } 
} 
+0

파싱 코드는 무엇입니까? – Larme

답변

0

. 파싱이 <comparison> 요소를 읽기 시작할 때 해당 배열을 인스턴스화합니다.

그러나 파서가 <comparison> 요소를 읽었을 때 값을 comparison이라는 속성에 할당합니다. 그것은 배열에 추가되지 않습니다. 기본 NSString 속성 (가정)은 단순히 구문 분석기가 <comparison> 요소를 읽을 때마다 다시 할당됩니다.

편집 :

parser:didStartElement:...가 새로운 요소를 읽을 때마다 호출된다. 이는 <a> 태그에도 적용됩니다. 이 방법에서는 currentElementValue을 재설정합니다. 그래서 각 <a> 값은 기본적으로 빈 문자열로 재설정됩니다. 마지막 읽기 값만이 남아 있으며, 마지막으로 <a> 태그의 값과 끝에 오는 텍스트의 값입니다.

+0

그 부분을 제거했는데 사용되지 않았습니다. – Warrior

+0

수정보기 ... – fguchelaar