2012-09-26 2 views
0

서비스 url에서 값을 소비해야하는 iPhone 응용 프로그램을 만들고 있습니다. url의 응답은 XML 형식입니다 .XML 파일은 동일한 이름 속성을 여러 번 가지며 이러한 속성은 정적이 아닙니다. 속성은 때때로 증가 할 수 있습니다. 따라서 iPhone에서 XML 응답을 사용하는 방법을 이해할 수 없었습니다.NSXMLParser를 사용하여 아이폰에서 동일한 이름 속성을 가진 XML 파일을 구문 분석 하시겠습니까?

내 XML 응답은 다음과 같습니다

GetUserResponse xmlns="http://schemas.datacontract.org/2004/07" 
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <CompanyList> 
     <User> 
     <Address> 
       <City>Alabaster</City>     
       <State>Alabama</State> 
      </Address> 
      <Employee> 
       <Name>DrJohn</Name> 
      </Employee> 
     </User> 
     <User> 
      <Address> 
       <City>SanFransisco</City>>    
       <State>California</State> 
      </Address> 
      <Employee> 
       <Name>DrWilliams</Name> 
      </Employee> 
     </User> 
    </CompanyList> 
    </GetUserResponse> 

것은 내가이 개 태그로 태그의 특정 수있을 것입니다 말할 수있다 더군 수도 있고 월 시간이 갈수록 증가하지는 않습니다. 나는 항목 수와 같은 값을 취하고 값을 추출해야한다고 생각하지만 어떻게 이해할 수 있습니까?

+0

월 당신에게 [http://stackoverflow.com/questions/12471774/cant-retrieve-xml-values-using-nsxmlparser/12472090#12472090][1] 을하는 데 도움이 [1] : http://stackoverflow.com/questions/12471774/cant-retrieve-xml-values-using-nsxmlparser/12472090#12472090 –

+0

위의 모든 XML 태그가 다른 경우 문제가 무엇입니까? –

+0

두 개의 태그가 있고 그 값을 소비해야합니다. 그리고 태그의 수가 증가 할 수 있습니다 .... 배열로 가져 가야합니까 아니면 ....? – cutiepie

답변

0

이것은 여러 가지 방법 중 하나입니다. 단순히 attributeDict를 가져 와서 키 - 값을 사용하여 모든 값을 파싱 할 수 있습니다. 아래 링크

NSString *element; 

- (void) viewDidLoad { 

    [super viewDidLoad]; 
    cityArr = [[NSMutableArray alloc] init]; 
} 

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

    element = elementName; 

    if ([elementName isEqualToString:@“Address”]) { 

     // initialize stings to store values of child elements 
     cityStr = [NSMutableString alloc] init]; 
    } 
} 

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 

    if ([element isEqualToString:@“City”]) 

     cityStr appendString:string];// Append Values 
} 

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

    if ([elementName isEqualToString:@“Address”]) { 

     [cityArr addObject:cityStr]; // Add strings to array/dictionary and release string 
    } 
} 
+0

문자열을 초기화하는 방법, 배열에 값을 추가하는 방법을 알려주시겠습니까?? 모바일 플랫폼에 새로운 Bie이기 때문에 아무 것도 이해할 수 없었습니다 .... – cutiepie

+0

오, 미안 해요 ... 내 대답을 업데이트하겠습니다. .. – Nina

+0

안녕하세요 만약 내가 Line1 태그를 소비하고 싶다면이 코드는 Iam writing .. didStartElement {if ([elementName isEqualToString : @ "Address"]) {cityStr = [[NSMutableString alloc] init]; line1Str = [[NSMutableString alloc] init]; } 찾았 음 {if ([element isEqualToString : @ "City"]) { [cityStr appendString : string];} else (if 요소의 isEqualToString : @ "Line1") {{line1Str appendString : string];} didEndElement NSLog (@ "% @", cityArr), NSLog (@ "% @", line1Str); {} (NSString은 " ; 여기 line1Arr가 null 값을 인쇄 중입니다. – cutiepie