2013-07-31 2 views
1

URL에서 일부 XML 데이터를 구문 분석하려고합니다. 거의 작동하지만 예상되는 데이터는 기록되지 않습니다.NSXMLParser가 작동하지 않습니다.

#pragma mark - NSXMLParserDelegate 
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { 
    // If you have a more complex object you could init here 
    // Since I'm just storing a string I won't do anything 
    if ([elementName isEqualToString:@"name"]) { 
    // NSLog(@"didStartElement - %@", elementName); 
    } 
    } 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    if (!self->currentStringValue) { 
    self->currentStringValue = [[NSMutableString alloc] init]; 
    // NSLog(@"didStartElement - %@", string); 

    } 


    [self->currentStringValue appendString:string]; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI 
    qualifiedName:(NSString *)qName { 

     NSString *currentStringValue = [self->currentStringValue 
           stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    self->currentStringValue = nil; 

    if ([elementName isEqualToString:@"name"]) { 
      self->ourExpectedElementValue = currentStringValue; 
      NSLog(@"%@",currentStringValue); 
     } 
    } 

는 XML 데이터에서 볼 수 있듯이, 하나 이상의 '이름'요소가 있습니다 : 여기

는 XML 데이터 여기

<?xml version="1.0" encoding="utf-8"?> <result> 
<row> 
<id>1</id> 
<menu_id>1</menu_id> 
<group_id>1</group_id> 
<name>Merchandise</name> 
<image>bag of beans.jpg</image> 
</row> 
<row> 
<id>4</id> 
<menu_id>1</menu_id> 
<group_id>1</group_id> 
<name>Misc</name> 
<image>tea.jpg</image> 
</row> 

그리고을의 샘플 것은 내 코드입니다 그리고 마지막 줄에 3 모든 <name> 타 내에서 모든 값을 기록하기위한 것입니다

NSLog(@"%@",currentStringValue); 

을 읽 GS, 대신 만이 기록 :이 토론에 알고 보니

2013-07-31 19:02:56.394 Touch2Go[1775:11303] Merchandise 
+0

문제점을 재현 할 수 없습니다. 코드는 "Merchandise"와 "Misc"를 모두 기록합니다. 파서 오류를 피하기 위해 필자는 누락 된 ''을 XML 데이터에 추가했습니다. –

+0

이지만 태그가 없습니다. 그게 문제 야? – AndroidDev

+0

첫 줄에 ''태그가 시작되었습니다. 그리고 네, 그것 없이는 작동하지 않을 것입니다. –

답변

1

, XML 데이터가 하나의 최상위 요소를 가지고 있지 않은 XML 규격에서 요구하는, 그래서 모습으로 이 :

<row> 
    ... 
</row> 
<row> 
    ... 
</row> 
<row> 
    ... 
</row> 

파서 (에러 상태로 복귀) 첫 번째의 완전한 "행"태그 파싱 후 멈춘다. 데이터는 단일의 최상위 요소

<result> 
    <row> 
     ... 
    </row> 
    <row> 
     ... 
    </row> 
    <row> 
     ... 
    </row> 
</result> 

묶인 경우 의도 된 모든 요소를 ​​해석한다.

0

배열을 가져 가야합니다. xml에서 문자열을 가져올 때 didEndElement 메서드의 배열에이 문자열을 추가해야합니다.

+0

코드에서 보여 주시겠습니까? +1 – AndroidDev