노블의 개발이야기

[iOS] XML Parser 본문

iOS

[iOS] XML Parser

더플러스 2015. 5. 6. 12:05

XML 파서

XML 파서는 XML 파일을 읽어들이면 앞에서부터 순서대로 분석하기 시작한다.

'태그'나 '텍스트'가 발견될 때마다 잘라내서 '이런 것이 발견되었습니다 어떻게 처리할까요?' 라고 물어오므로 그때마다 처리할 방법을 프로그램에서 지정해주어야 한다.

이를 델리게이트 메서드라고 한다.







1. URL 오브젝트 생성

XML 파일을 의미하는 URL 문자열로부터 URL 오브젝트(NSURL)을 생성한다.


NSURL *url = [[NSURL alloc] initWithString:@"http://sites.google.com/site/iphonesdktutorials/xml/Books.xml"];


2. URL 오브젝트를 사용해 XML 파서 생성

XML 파서를 만들 때 initWithContentsOfURL에서 읽어들일 XML 파일의 URL 오브젝트를 설정한다.


NSXMLParser *xmlParser = [[NSXMLParser allocinitWithContentsOfURL:url];


3. delegate를 지정

delegate를 self로 지정하면 XML 파서에서 해석을 할 때 통지 대상이 self가 된다.

'태그'나 '텍스트'를 발견할 때마다 현재 프로그램을 작성하고 있는 곳에 마련된 델리게이트가 호출되어 분석할 수 있게 된다.


xmlParser.delegate = self;


4. 해석의 시작

해석을 시작하려면 XML 파서의 parse 메소드를 호출한다.


[xmlParser parse];


5. parserDidStartDocument

해석을 시작하면 무엇을 할 것인가?

해석을 시작했을 때 호출되는 메소드이다.

주로 데이터 초기화나 해석 준비를 행한다. 해석 중에 '지금 조사하고 있는 태그'를 알아야 하므로, 이를 기억해 둘 변수 등을 준비한다.


6. didStartElement    

시작 태그를 발견하면 무엇을 할 것인가?

태그의 이름은 elementName에 문자열 형태로 들어온다.

태그에 붙은 속성은 attributeDict에 사전 형식으로 설정되므로, 키워드를 사용해 꺼낸다.

시작 태그를 발견한 다음에는 텍스트 요소를 읽어들이므로 해당 텍스를 넣어둘 텍스트 버퍼 변수를 준비해둬야 한다.


7. foundCharacters

텍스트 요소를 발견하면 무엇을 할 것인가?

텍스트 요소는 string에 문자열 형태로 들어온다.

하지만 텍스트 요소는 한번에 전부 읽어들인다는 보장이 없고, 몇 번으로 나뉘어 읽히기도 한다.

이 때문에 연속해서 텍스트 요소를 발견하면 그 때마다 문자열을 이어야 한다.


8. didEndElement

종료 태그를 발견하면 지금까지 읽어들인 텍스트 요소가 확정되었다는 의미가 된다.


9. parserDidEndDocument

해석을 종료하면 무엇을 할 것인가?

해석 종료 시에 처리가 필요하면 여기서 실행한다.




[참고]

아이폰 NSXMLParser 예제 따라하기

NSXMLParser로 RSS 읽어오기

'iOS' 카테고리의 다른 글

[iOS] UIActionSheet  (0) 2015.07.13
[iOS] UIWebView 웹페이지 너비 맞추기  (0) 2015.05.14
[iOS] GCD(Grand Central Dispatch) 사용하기  (0) 2015.04.23
[IOS] ARC - Toll-Free Bridging  (348) 2015.04.23
[iOS] 네트워크 상태 체크  (0) 2015.04.23
Comments