2010-02-09 3 views
3

저는 아이폰 개발에 익숙하지 않습니다. XML 페이지를 파싱하고 tableview에 내용을 표시하고 있습니다. XML 페이지의 일부 블록에서 하위 요소가 누락되었습니다. 내 배열에 값 o를 추가하고 싶습니다. 등급 태그와의 tableview에서의 속성 numRates 값을 표시 : 나는 GD를 분석하고 XML 구문 분석에서 자식 요소를 찾을 수없는 경우 배열에 기본값을 추가하는 방법은 무엇입니까?

<entry> 
<id>xxx </id> 
<title>xxxxx</title> 
<gd:ratings numRaters="2"/> 
</entry> ..................................>first block 
<entry> 
<id>xxx </id> 
<title>xxxxx</title> 
</entry> ....................................>Second block 
<entry> 
<id>xxx </id> 
<title>xxxxx</title> 
<gd:ratings numRaters="2"/> 
</entry> .....................................>Third block 

같은 자식 요소가 특정 block.My XML 파일 좋아하지 않아입니다. numRates의 값을 저장하는 가변 배열을 사용하고 있습니다. 두 번째 블록을 구문 분석 할 때 배열에 객체 "O"를 추가해야합니다. 그 이유는 gd : ratings 태그가 포함되어 있지 않기 때문입니다. 값이 특성 태그에 있기 때문에 for NSXML 파서 DidStartElement 메소드에서 내용을 검색하고 변경 가능한 배열에 추가하는 작업이 수행됩니다.

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

currentElement = [elementName copy]; 
if ([elementName isEqualToString:@"entry"]) { 

    entry = [[NSMutableDictionary alloc] init]; 
    currentTitle = [[NSMutableString alloc] init]; 
    currentDate = [[NSMutableString alloc] init]; 
    NSLog(@"inside image1 "); 
}else if([elementName isEqualToString:@"media:thumbnail"]) 
    { currentImage = [[NSMutableString alloc] init]; 
     if(myUrl == nil){ 
     myUrl = [NSString stringWithString:[attributeDict objectForKey:@"url"]]; 
     } 
     [currentImage appendString:myUrl]; 
     [stories1 addObject:currentImage]; 
     myUrl=nil; 
     } else if([elementName isEqualToString:@"gd:rating"]) 
{ 
    currentRating=[[NSMutableString alloc]init]; 

     myRatings=[NSString stringWithString:[attributeDict objectForKey:@"numRaters"]]; 

    [currentRating appendString:myRatings]; 
    [stories2 addObject:currentRating]; 
} 
} 

어레이 stories2 어레이 낭포 (25 개) 엔트리의 태그 블록이 10 블록 doesnot 유무 GD 평가 요소가 있기 때문에 난이 임의 order.Is에서의 tableview에 표시 할 수 15 values.So을 갖는다 "발견 된 문자"메소드에서 속성 태그를 검색하는 방법. 도와주세요. 고마워.

답변

2

외부 요소가 끝나면 자식 요소가 배열에 추가되었는지 확인하십시오. 요소가 종료 그런 경우

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

    currentElement = [elementName copy]; 
    if ([elementName isEqualToString:@"entry"]) { 
    entryHasRating = NO; 
    ... 
    } else if ([elementName isEqualToString:@"gd:rating"]){ 
    entryHasRating = YES; 
    ... 
    } 
} 

:

다음과 같은 바르 BOOL entryHasRating를 사용 할 수

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
    if ([elementName isEqualToString:@"entry"]&& !entryHasRating) { 
     [stories2 addObject:@"No Rating"]; 
     entryHasRating = YES; 
    } 
    ... 
} 
+0

정교하게하십시오. 내 storeis2 배열에 값 0을 추가 할 수 있습니다. – Warrior

+0

코드를 추가했습니다. 희망이 도움이됩니다. – FelixLam

+0

수천 개의 감사합니다. 괜찮습니다 ... – Warrior

1

당신은 당신이 예상됩니다 데이터 필드를 모두 알고있는 경우에, XML을 파싱하기 전에 모든 예상 값에 대한 자리 표시자를 사용하여 사전을 작성할 수 있습니다. XML을 구문 분석 할 때 자리 표시자를 실제 값으로 바꿉니다.

관련 문제