일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 안드로이드 개발 레벨업 교과서
- ios
- android studio
- BLOCK
- unreal
- signing
- AccountManager
- 배포
- 다른 앱에서 열기
- Android O Preview
- 페이스북
- Android O
- xcode
- Google Cloud Messasging
- service
- 데이터 공유
- contentprovider
- Google Cloud Messasing
- 카카오톡
- NSURLConnection
- Unchecked Exception
- 트위터
- GCM
- Activity 수명 주기
- In-app Billing
- gradle
- Push
- ios9
- HTTP
- Android
- Today
- Total
노블의 개발이야기
[iOS] XML Parser 본문
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 alloc] initWithContentsOfURL: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
해석을 종료하면 무엇을 할 것인가?
해석 종료 시에 처리가 필요하면 여기서 실행한다.
[참고]
'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 |