2012-09-29 3 views
0

나는 XML 파일을 구문 분석하고 있는데처럼 내 XML 보인다 : 내 파서 코드는 다음과 같이 아이폰에서 XML을 파싱 할 때 여러 개의 동일한 XML 태그를 추가하는 방법은 무엇입니까?

<List> 
<CompanyallProvidersList> 
    <CityDetails> 
      <City>NewYork</City> 
      <Id>1</Id> 
    </CityDetails> 
    <StateDetails> 
      <State>Alabaster</State> 
     </StateDetails> 
    <CityDetails> 
      <City>Newyork</City> 
       <Id>1</Id> 
    </CityDetails> 
<StateDetails> 
       <State>California</State> 
     </StateDetails> 
</CompanyallProvidersList> 
</List> 

입니다

:

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


if([elementName isEqualToString:@"CompanyallProvidersList"]) 
{ 
arr=[[NSMutableArray alloc] init]; 
drr=[[NSMutableDictionary alloc] init]; 
} 
srr=[[NSMutableString alloc] init]; 
} 


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


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

if([elementName isEqualToString:@"City"]) 
{ 

[drr setObject:srr forKey:@"City"]; 
[srr release],srr=nil; 
return; 
} 

if([elementName isEqualToString:@"Id"]) 
{ 

[drr setObject:srr forKey:@"Id"]; 
[srr release],srr=nil; 
return; 
} 

if([elementName isEqualToString:@"State"]) 
{ 

[drr setObject:srr forKey:@"State"]; 
[srr release],srr=nil; 
return; 
} 


if([elementName isEqualToString:@"CompanyallProvidersList"]) 
{ 
[arr addObject:drr]; 
[drr release],drr=nil; 
} 
[srr release],srr=nil; 

} 

내 출력은 다음과 같다 :

NewYork 
1 
California 

하지만 출력을 다음과 같이 지정하십시오.

NewYork 
1 
Alabaster 

NewYork 
1 
California 

`나는 그것을 얻을 수 없었다. 나는 어디에 잘못 될까? 코드의 probem에서

어떤 도움을 주시면 감사하겠습니다 ......

감사합니다 ....

답변

0

는 동일한 키에 대한 두 개의 값을 추가합니다. 따라서 두 번째 값이 첫 번째 값을 대체합니다. 당신은 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 대표

if([elementName isEqualToString:@"StateDetails"]) 
{ 
    [arr addObject:drr]; 
} 

을 변경 한테 한 다음 코드를 추가해야합니다

if([elementName isEqualToString:@"CompanyallProvidersList"]) 
{ 
[drr release]; 
} 

은 또한 당신의 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict

if([elementName isEqualToString:@"CityDetails"]) 
{ 
    drr=[[NSMutableDictionary alloc] init]; 
} 

그것은 일 것이다에 다음 코드를 추가합니다! 감사 Midhun 헤이 .... 내가 it..Yahoooo있어

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{  
    if([elementName isEqualToString:@"CompanyallProvidersList"]) 
    { 
    arr=[[NSMutableArray alloc] init]; 
    drr=[[NSMutableDictionary alloc] init]; 
    } 
    if([elementName isEqualToString:@"CityDetails"]) 
    { 
    drr=[[NSMutableDictionary alloc] init]; 
    } 
    srr=[[NSMutableString alloc] init]; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if([elementName isEqualToString:@"City"]) 
    { 
    [drr setObject:srr forKey:@"City"]; 
    [srr release],srr=nil; 
    return; 
    } 

    if([elementName isEqualToString:@"Id"]) 
    { 

    [drr setObject:srr forKey:@"Id"]; 
    [srr release],srr=nil; 
    return; 
    } 

    if([elementName isEqualToString:@"State"]) 
    { 
    [drr setObject:srr forKey:@"State"]; 
    [srr release],srr=nil; 
    return; 
    } 

    if([elementName isEqualToString:@"StateDetails"]) 
    { 
    [arr addObject:drr]; 
    } 

    if([elementName isEqualToString:@"CompanyallProvidersList"]) 
    { 
    [drr release],drr=nil; 
    } 
    [srr release],srr=nil; 
} 
+1

!!!! : 같은

이제 코드는 모양 가능한 경우 +100 ... – cutiepie

+1

@cutiepie : 즐거움과 함께 :) –

+0

@Mithun. 나는 이렇게되고있다 : ({City = "NewYork", Id = "1"; State = Alabaster;} { 질문 : 응답에서 두 개의 행이있는 TableView에있는 모든 것을 제거 할 수 있습니까? – cutiepie