2009-08-22 5 views
2

내 iPhone 앱용 NSXMLParser를 알아 내려고 노력하고 있는데 일반적으로 작동하는 방식을 이해하는 동안 필요한 값을 추출하는 방법에 대해 조금 혼란 스럽습니다.NSXMLParser로 기본 XML 파일을 구문 분석하려면 어떻게해야합니까?

내가 파싱하는 XML 결과는 매우 기본입니다. 그렇게 같다 :

<start> 
<status>300</status> 
<record> 
    <title>The Title</title> 
    <content>Some content</content> 
</record> 
</start> 

나는 3 일을해야합니다 상태의 값을 가져옵니다. 첫 번째 레코드의 내용 값을 가져옵니다. 여러 개의 "레코드"요소를 제공하는 응답이 올 수 있으므로 첫 번째 레코드 만 가져와야합니다.

어떻게 그렇게 간단하게 할 수 있는지 알 수 없습니다. 필자가 보았던 대부분의 예제는이 데이터를 채우기위한 별도의 객체를 만드는 것과 관련이 있으며, 2 개의 값에 대해 필요한 것을 볼 수 없습니다. 아무도 나에게 첫 번째 레코드에 대해서만이 두 가지 데이터를 가져 오는 방법을 말해 줄 수 있습니까?

답변

4

NSXMLParser이 XML 태그를 만날 때 가장 먼저 일어나는 일은 위임 메서드 parser:didStartElement:namespaceURI:qualifiedName:attributes:이 호출된다는 것입니다. 여기서는 elementName 변수 만 사용하면됩니다. 그런 다음 XML 파서가 태그의 문자를 읽고 내용이있는 parser:foundCharacters:을 호출합니다. 마침내 parser:didEndElement:namespaceURI:qualifiedName이 호출됩니다.

애플이 SeismicXML examlple에 사용하기 때문에 내가 찍은 접근 방식은 다음과 같은 방법을 사용하는 것입니다

: parser:didStartElement:namespaceURI:qualifiedName:attributes:에서

  1. 이 알려진 값으로 요소 이름의 문자열 비교 네가 걱정하는 끈인지 알아봐. 그렇다면 빈 문자열에 인스턴스 변수 (NSMutableString; contentOfCurrentXMLProperty)를 설정하십시오. 그렇지 않으면 nil으로 설정하십시오.
  2. parser:foundCharacters:에는 발견 된 문자를 contentOfCurrentXMLProperty에 추가하십시오.
  3. parser:didEndElement:namespaceURI:qualifiedName에서 contentofCurrentXMLProperty의 값을 해당 변수가 무엇이든 할당하십시오.

자세한 내용은 SeismicXML 예제를 참조하십시오.

특정 경우에 대한 몇 가지 사항 : XML 파서는 문자열 만 반환하기 때문에 status에 대해 문자열을 정수 (또는 사용중인 데이터 유형)로 변환해야합니다.

둘째, 단지 내가하고, 만약 그렇다면, nilcontentOfCurrentXMLProperty를 설정하기 전에 이미 record 태그를 본 적이 있는지 플래그 BOOL을 설정했던 parser:didStartElement:...record에 대한 첫 번째 값을 원하기 때문에.

2

NSXMLParser는 SAX와 유사한 이벤트 기반 파서이므로 파서를 설정하고 시작하고 키 이벤트를 수신 대기해야합니다.

파서를 설정합니다

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];
[parser parse];

재정 이러한 방법 :

– parser:didStartElement:namespaceURI:qualifiedName:attributes:
– parser:didEndElement:namespaceURI:qualifiedName:
– parser:foundCharacters:

당신의 기능은 기본적으로 말을해야합니다 :

  • 당신의 다음 시작에 도달하면 태그 :
  • 0

:

[elementName isEqualToString:@"status"]

  • 나에게 태그의 문자열 데이터를 보내기

    • 이 태그의 이름이 "상태"인 경우

    ...

    [<your statusValueHolder as NSMutableString> appendString:<foundCharacters' parameter>]

    ...

    당신은의 끝에 도달에 중단, (다른 경우에 동일한 논리를 적용 "레코드"라는 태그의 첫 시작을 검색 할 수 있습니다 태그, '레코드'등)

    이것을보고 집에서 사용해보십시오. Make NSXMLParser your friend.. API 참조 문서 add for NSXMLParser NSXMLParser의 대리자에 대한 대리 대리 메서드입니다.

+0

두 분 모두에게 감사드립니다. 나는 마침내 그것이 일하도록했다. – SonnyBurnette

관련 문제