2011-01-05 6 views
0

여기 내가하려는 일이 있습니다. 나는 사용자가 야후의 플레이스 파인더에 연결하는 도시를 입력하게하고있다. 여기 테스트 도시로 입력 된 "스프링 필드"가있는 XML 파일이 있습니다. 당신이 볼 수 있듯이XML을 반복하고 배열을 만드는 방법은 무엇입니까?

http://where.yahooapis.com/geocode?city=springfield

은, 야후 멋지게 발견 얼마나 많은 도시를 제공합니다. 그래서, 다음으로 각 도시를 찾아서 line2, line4woeid을 가져 와서 배열에 저장하고 싶습니다. 따라서, 배열은 ...

 -> line1 
City1 -> line2 
     -> woeid 


     -> line1 
City2 -> line2 
     -> woeid 

그런 다음, 나는 숨겨진 WOEID로,이 배열을하고 UITableView에 표시하고 싶었 (예를 들어, 두 도시와)과 같을 것이다. 도시 중 하나가 선택되면, 내가 선택한 도시의 WOEID를 가져와 사용해야합니다.

나는이 일을 NSXMLParser의 인스턴스를 사용하는 생각을했다.

편집 :는 아마도이 질문은 너무 광범위하다. 어쩌면 XML을 파싱하고 배열에 추가하는 데 도움이 될 수 있습니다. 감사! 즉 만들기 때문에,

http://developer.apple.com/library/ios/#samplecode/SeismicXML/Introduction/Intro.html

+0

이 질문은 너무 광범위합니다. Apple의 튜토리얼 및 샘플 코드로 앉아서 특정 질문으로 다시 돌아와야합니다. 당신이하고 싶은 것은 힘들지 않지만 응답은 SE 대답 이상입니다. –

+0

너무 광범위하다는 것을 이해합니다. 아마도 첫 번째 부분에 대한 도움을 얻을 수 있습니다. XML 구문 분석 및 배열에 추가. –

답변

1

가 나는 DOM 파서 대신 NSXMLParser (SAX 기반 구문 분석기)를 사용하는 것이 좋습니다 것 :

+0

나는 'TBXML'에 대한 경험이있다. 그래서, 제가 그것을 사용한다면, 배열에 필요한 데이터를 어떻게 추가할까요? –

+0

TBXML은 훌륭합니다. 루프의 각 도시 노드에 대한 하위 노드를 순회하면서 하나씩 배열에 추가하기 만하면됩니다. 이제 데이터를 다시 살펴 보았지만 line1/line2/woeID 데이터를 보유하는 City 객체를 만드는 것이 어떻습니까? –

+0

내가 할 수있을 것 같아. 나는 단지 TBXML을 사용하여 어떻게 다음에 ''을 찾을 지 모르겠다. 다음'Result' 객체로가는'TBXML' ('형제 명명 '과 같은 것)에 메서드가 있습니까? –

2

애플은 당신에게 유용 할 수있는 자신의 웹 사이트에서 샘플 NSXMLParser 응용 프로그램이 있습니다 배열을 만드는 것이 훨씬 쉽습니다.

libxml2 (iPhone SDK에 포함), TouchXML, TinyXML 또는 TBXML을 사용할 수 있습니다.

0

여기 내가 뭘 결국거야. 동일한 문제가있는 경우 다른 사용자를 돕기 위해 여기에 게시하십시오. Here is a sample XML that could be parsed using this method.

-(void)someMethod { 

TBXML *tbxml = [[TBXML tbxmlWithURL:YOURURLHERE] retain]; 

cityArray = [NSMutableArray array]; 
[cityArray retain]; 
if (tbxml.rootXMLElement) 
[self traverseElement:tbxml.rootXMLElement]; 
[tbxml release]; 
} 

- (void)traverseElement:(TBXMLElement *)element { 
do { 
    if ([[TBXML elementName:element] isEqualToString:@"Found"]) { 
    NSLog(@"Number of found items: %@",[TBXML textForElement:element]); 
    } 

    if (element->firstChild) 
      [self traverseElement:element->firstChild]; 

    if ([[TBXML elementName:element] isEqualToString:@"Result"]) { 
    TBXMLElement *cityName = [TBXML childElementNamed:@"line2" parentElement:element]; 
    TBXMLElement *country = [TBXML childElementNamed:@"country" parentElement:element]; 
    TBXMLElement *woeid = [TBXML childElementNamed:@"woeid" parentElement:element]; 

    NSArray *city = [NSArray arrayWithObjects:[TBXML textForElement:cityName], 
     [TBXML textForElement:country], 
     [TBXML textForElement:woeid],nil]; 

    [cityArray addObject:city]; 
    } 
    // Obtain next sibling element 
} while ((element = element->nextSibling)); 
} 
관련 문제