2010-12-28 1 views
2

학교 프로젝트 용으로이 XML 파일을 구문 분석하려고합니다 : http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/genre=20/xml.NSXMLParser, 같은 요소 중 두 가지가 도움이됩니다!

제 문제는 여기에있는 앨범 이름을 얻으려는 것입니다 : <im:collection><im:name> 여기에 있습니다. 그러나 <im:name>이라는 두 가지 요소가 있습니다. 첫 번째는 <entry>이고 두 번째는 <im:collection>입니다.

두 번째 정보를 얻으려면 어떻게해야합니까? <im:name>?

+0

태그가 달린 요소가 실제로 질문에 나타나도록 질문을 편집하십시오. "여기에있다 : 여기. 그러나 두 가지 요소가있다." 끔찍하게 유용하지 않습니다. 내가 할 수 있으면 질문을 편집 하겠지만 아직 그 특권이 없습니다. –

+0

@ 필립 : 수정 됨. –

+0

@ 에반, 감사합니다. 여기에 코드 형식을 지정하는 데 익숙하지 않습니다! 그것은 내 첫 게시물 btw입니다! –

답변

4

태그가 여러 개의 부모에서 여러 번 나타날 수 있으므로 XML로 항상 문제에 봉착하게됩니다. 내가 이것을 추적하는 방법은 부모 태그를 추적하는 것입니다. 따라서, 서브 클래 싱 NSXMLParser에, 나는 두 가지 속성 유지 : parser:didStartElement:namespaceURI:qualifiedName:attributes:에서

NSString *currentTag; 
NSString *parentTag; 

를 내가 그들을 채울 : parser:foundCharacters:에서

parentTag = currentTag; 
currentTag = elementName; 

그리고 나는 내가 현재 해요 부모 태그에 따라 내 데이터 모델을 채 웁니다 ...

if ([currentTag isEqualToString:@"im:name"]) { 
    if ([parentTag isEqualToString:@"entry"]) { 
     // do something 
    } else if ([parentTag isEqualToString:@"im:collection"]) { 
     // do something else 
    } 
} 

취향에 소금을 첨가하십시오.

+0

당신은 엄청 큰 빚이 있습니다! 정말 고마워!! –

0

끌어 오기 파서 (DOM을 탐색하는 대신 태그 이벤트를 처리하는)를 사용하는 모든 XML 구문 분석에서 특정 요소가 필요한 경우 문서의 위치를 ​​추적하는 일종의 변수를 설정해야합니다 다른 하위 트리의 요소와 이름이 같은 XML의 하위 트리입니다.

당신이 수집하는 이름을 알고 있기 때문에, 당신은 또한 수집 태그를 찾아 입력하고 떠났을 때를 추적 할 필요가 있습니다 - 그래서 네임 태그에 올 때 당신은 그것을 처리합니다 당신도 컬렉션 안에 있다면.