'parsing'에 해당되는 글 1건

  1. 2012.06.13 iOS개발하기 #41. XML Parser (2) <TBXML> (29)

오늘의 주제

1. TBXML로 XML파싱


마흔 한 번째 시간입니다.^^

지난 번에 테이블을 준비해 두었었죠?
오늘은 XML 파싱을 한 번 해보려 합니다.
본래 코코아 내에 NSXMLParser 라는 XML파싱 클래스가 존재 합니다.
그래서 그녀석으로 포스팅을 해볼까 하다가, 그녀석 보다 좋은 녀석이 있어서 소개 겸 진행해 보려고 합니다.

사용법도 훨씬 간단하고 속도도 훨씬 빠릅니다~!
NSXMLParser는 처음 파싱해보는 분들은 정말 어려워 하는 경향이 있습니다.
그래서 준비했습니다. TBXML...!

오픈 라이브러리 가져다가 잘 쓰는 것도 중요합니다 ㅎㅎㅎ

저도 처음 써보는데, 일단 해 봅시다 ㅎㅎ


# XML의 구조


지난 번에 예제로 쓰겠다고 했던 날씨 XML 데이터 입니다.
XML은 요소(엘리먼트), 속성 등을 알면 됩니다.

1번 : 엘리먼트 입니다. 저 줄 하나가 통채로 엘리먼트 입니다. 맨 위에 루트 엘리먼트가 current라는 이름을 갖고 있네요. 그 자식 엘리먼트가 weather구요, weather의 자식 엘리먼트들이 local이란 이름으로 쭈욱 나열되어 있는 모습입니다.
2번 : 엘리먼트 이름 입니다.
3번 : 속성 이름입니다. 저렇게 엘리먼트 내부에 들어가 있는 녀석을 속성이라고 부릅니다.
4번 : 속성값 입니다.
5번 : 엘리먼트 텍스트 입니다.

일단 이렇게 기본적으로 알고 가 봅시다~!

# TBXML 다운받기

http://www.tbxml.co.uk

TBXML 공식 블로그입니다. 영국사람이 만들었나 보네요 ㅋㅋ 들어가 봅시다.
다운로드 링크를 타고 가서 소스파일을 다운받습니다.
지금 최신 버전이 1.5 버전이라서 추후에는 어떻게 변경될지 모르겠지만 여튼 아직까진 이렇습니다 ㅎㅎ


압축을 풀면 폴더들이랑 파일들이 나와요~
그중에 제가 여기 집어 넣은 녀석들을 골라서 가져옵니다.
그리고 우리 프로젝트의 pch파일로 옵니다. 거기서 하나 정의를 해 주시구요. (이녀석이 뭔가는 별로 신경쓰지 않으셔도 됩니다.) 


그리고 프로젝트 타겟 속성으로 와서 라이브러리 추가 버튼을 눌러줍니다.


libz.dylib를 추가해 주시구요


이제 테이블뷰 컨트롤러 구현파일에 와서 헤더파일을 임포트 합니다.
그리고 이쁘게 코딩~ 코딩~
TBXML은 블럭코딩 방식을 사용하였는데 iOS4.0 이상부터 지원합니다. 일단 아래 보이는 코드들이 좀 생소하더라도 블럭 코딩이라는 것만 알아두시고, 일단은 넘어갑니다 ㅎㅎ


또 또 코딩합니다~ 스레드 만드는 것은 설명 필요 없겠죵? +_+
2012/06/01 - [iOS Dev/함께해보기] - iOS개발하기 #36. UISearchDisplayController(2)
2012/06/06 - [iOS Dev/함께해보기] - iOS개발하기 #38. UISearchDisplayController(4)
요기서 스레드에 대해 좀 볼 수 있을 거에요~


자, 여기까지 모두 잘 되었다면 요로케 로그가 찍혀야 합니다~!
오홍홍~_~


잘 나왔나용?ㅎㅎ
오늘 테이블에 뿌리는 것까지 해 보려 했는데, 일단은 여기까지만 해야겠네용~

지난 번에 잘 따라오신 분들이라면 이미 테이블에 넣는 작업을 하고 계시지 않을까 싶네요 ㅎㅎ

그럼 다음 번에 또 뵙도록 해요 :-)

by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 손가락 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

댓글을 달아 주세요

  1. 인절미후후 2012.06.13 19:47  댓글주소  수정/삭제  댓글쓰기

    TBXML을 이전에 문서로는 봤었는데요(저는 이전에 테이블에 파싱해서 데이터 뿌려주는거 할때 NSXMLParser를 이용했었습니다.)
    야곰님 덕분에 오늘 접해보았습니다.
    스샷대로 따라가서 로그까지는 뿌려보았는데요..
    사용해본 후기를 적어보자면은 1.5버전은 블록코딩을 사용해서 좌절을...
    안에서 변수생성은 되는데 밖으로 변수를 보내거나 밖에 있는 변수를 데려와서 값을 넣어주는 방법을 모르겠더라구요..
    설상가상으로 해당사이트 API와 가이드라인을 찾아보는데 1.5버전의 메뉴얼은 없는거 같더라구요.
    그래서 결국 제 프로젝트에 적용을 못하고 NSXMLParser를 사용해서 마무리 했답니다 ㅎㅎ
    다음 강좌에 테이블 적용편을 보면 다시 한번 실습해보도록 하겠습니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.14 01:31 신고  댓글주소  수정/삭제

      넵, ㅎ 저도 NSXMLParser를 포스팅 할까 고민 많이 했는데... 흠... 그거로 해볼껄 그랬나봐요^^;
      블록코딩을 했지만 우리는 데이터를 전달 해 줄 수 있는 많은 수단들이 있었잖아요?ㅎ 잘 기억해 보세요...ㅎㅎ
      조만간 그 베일을 벗겨드릴게요~
      저도 1.5버전에 대한 도큐먼트가 없어서 처음에 굉장히 헤메었는데 구글신께서 도와주셨죠 ㅎ
      항상 이렇게 오셔서 덧글도 주시고 항상 고맙습니다^^*

  2. 인절미후후 2012.06.14 10:34  댓글주소  수정/삭제  댓글쓰기

    NSXML파서는 관련 자료가 많으니까요~
    오히려 새로운 부분의 코딩을 접해서 저는 더욱 신이 납니다.
    오브젝티브씨도 그냥 자바처럼 씨처럼 사용 했는데 이번 강좌로 오브젝티브씨에 한발 더 다가서는 것 같아서
    머리는 복잡하지만 두근두근 합니다 ㅎㅎ
    단순히 외국자료의 번역을 소개하는게 아니라(시중에 그런 책/블로그 도 많잖아요.) 정형화된 방식이 아니라
    더욱 학습효과가 좋다고 생각합니다 다음 강좌가 기다려지네요 이전 강좌 복습 좀 해야겠네요 ㅎㅎ
    덕분에 xml파서 자료도 찾아보고 저는 아주 유익했습니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.14 10:52 신고  댓글주소  수정/삭제

      그렇게 말씀해 주시니 저도 마음이 한결 놓이네요 ㅎ
      이렇게 덧글이 달리니 저도 아주 신이 납니다 ㅎㅎ
      요즘 바빠서 제대로 쓸 시간이 없는데, 일단 XMLParser 까지만이라도 최대한 빨리 마무리 지어야 겠네요 +_+

  3. Sio 2012.07.24 17:00  댓글주소  수정/삭제  댓글쓰기

    TBXML이라는 것도 있군요 ㅎㅎ 덕분에 block?코딩 이라는 것도 알게 되었습니다;;;
    처음 보는거라 이게 뭐지??? 했는데 아직도 신기합니다 ㅋㅋㅋ
    근데 아직도 뭔지 잘 몰라서 계속 구글링 중 입니다 ㅋㅋㅋ
    정말 계속 새로운 뭔가가 나타나는 것 같아요 ㅎㅎ

    잘보고 갑니다~!

  4. 나에게넌 2012.08.14 13:36  댓글주소  수정/삭제  댓글쓰기

    좋은 강의 감사합니다..
    NSXMLParser도 찾아봐야겠어요..

    TBXML이랑 메모리 사용량에선 비슷하지만 속도면에선 차이가 난다내요..
    http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.14 14:21 신고  댓글주소  수정/삭제

      위 링크의 그래프는 저도 본 자료인데 Seconds To Parse라고 나와있죠 :)
      즉, 파싱에 걸리는 시간입니다.
      NSXMLParser보다 TBXML이 소요시간이 훨씬 짧은 것을 확인 할 수 있습니다 ^^~

    • 나에게넌 2012.08.14 18:05  댓글주소  수정/삭제

      그러네요..Speed만 보고 판단해버렸네요.. ㅎ

  5. seongkwon 2012.09.08 16:29  댓글주소  수정/삭제  댓글쓰기

    야곰님 ^^ 항상 강의 관련해서 자료 잘보고 있습니다.
    XML 파싱공부중에 TBXML로 XML파싱 부분을 완료하였는데 Log가 찍히지가 않습니다.

    모든 부분 똑같이 작성하였고, 에러는 없는데 하나 워닝이 있다면
    TBXML.m 파일에서 value = [NSString stringWithString:@""]; 이부분이 워닝이뜹니다.

    지우고 타입을 바꿔봐도 파싱자체가 되는거 같지 않습니다.
    제가 잘못한 것일까요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.03 21:39 신고  댓글주소  수정/삭제

      늦은 답변이지만... 혹시 TBXML 최신버전을 사용해 보셨는지요?
      이게 워낙 빨리빨리 바뀌는 IT시대라서 새로운 버전이 나왔을 수도 있어요~ iOS도 Xcode도 빨리빨리 변화하고 있으니까요^^;

  6. 꾸앵 2012.10.23 16:38  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. TBXML을 사용하는 강좌 감사합니다.
    헌데 진행하다가 문제가 생겨 이렇게 댓글남겨요
    뷰컨트롤러쪽에선 에러가 안뜨는데
    TBXML.M파일이랑
    TBXML+HTTP.M 파일에서 에러가 무려.... 9개나 잡히네요 ....

    http://blog.naver.com/storyphoto/viewer.html?src=http%3A%2F%2Fblogfiles.naver.net%2F20121023_160%2Fangel1004ppp_1350977758644y4S0a_PNG%2F%25BD%25BA%25C5%25A9%25B8%25B0%25BC%25A6_2012-10-23_%25BF%25C0%25C8%25C4_4.27.29.png

    소스 원본이 필요할려나요?? ㅠㅠ

  7. 꾸앵 2012.10.24 19:32  댓글주소  수정/삭제  댓글쓰기

    ARC를 제외시키고 나니 대부분의 오류들이 없어졌네요... 헌데 하나의 오류가 더 남긴 했는데
    pch 파일에서 오류가 발생하고
    CGG 4.2 Error
    Unrecognized command line option "-fno-objc-arc"

    라고 나오네요

    구글링 해보니 컴파일러를 GCC 에서 LLVM 으로 교체해보라고 하던데
    방법도 모르겠고.. 답답하기만 하네요 ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.25 09:50 신고  댓글주소  수정/삭제

      http://useyourloaf.com/blog/2011/03/21/compiler-options-in-xcode-gcc-or-llvm.html
      이 글을 한 번 참고해 보시기 바랍니다 :)
      글에있는 스크린샷을 참고하시면 대충 어디있는지 짐작하실 수 있을거 같아요~ 아마도 프로젝트 속성에서^^

    • 꾸앵 2012.10.25 11:10  댓글주소  수정/삭제

      아... 빌드셋팅쪽에 있어서 바꿨어요 ^^;
      어쨌든 도움 감사합니다 ㅎㅎ

  8. 꾸앵 2012.10.26 11:42  댓글주소  수정/삭제  댓글쓰기

    이틀동안 이 오류가지고 허공에 삽질 열심히 해대고 있는데 ㅋㅋ ㅠㅠ
    ARC 관련해서 적용하면 다른오류 컴파일러 교체하면 또 이전오류 무한반복중.... ㅠㅠ
    구글링을 열심히 해도 딱히 이거다 라는 것도 없는 것 같고... 으앜ㅋㅋ

    TBXML+HTTP.m 파일의
    @autoreleasepool에서 Unexoected '@' in grogram
    으로 에러메시지가 나오는데.. 후... XML 파싱 힘드네요 ㅠ

    • 꾸앵 2012.10.26 11:55  댓글주소  수정/삭제

      블럭프로그래밍이 오토릴리즈풀을 파싱을 못한다는 것 같네요
      NSAutoreleasePool 클래스로 바꿔보라고 해서
      바꿨더니 잘되네요 크크...

      항상 고치고 보면 1분만에 고치는걸 안될땐 그걸 모르니...
      공부를 얼릉 열심히 해야할 듯 ㅠ

      해결했으니 다음으로 고고~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.29 09:14 신고  댓글주소  수정/삭제

      ㅎㅎ 항상 해결하고 보면 정말 아무것도 아닌게 많죠^^;
      그런 사소한 것들이 쌓이고 쌓이다보면 어마어마해 지는 것입니다...ㅎㅎㅎ
      많은 도움이 되어드리지 못해 정말 죄송합니다. 그래도 해결되셨다니 다행이네요 ㅎ

  9. 초보에꿈 2013.01.10 16:35  댓글주소  수정/삭제  댓글쓰기

    열심히 강의를 듣고 따라하고 있는데요 ㅎㅎ

    // 파싱 시작
    [TBXML newTBXMLWithURL:weatherURL success:tbxmlSuccessBlock failure:tbxmlFailureBlock];

    이걸로 하니깐 계속 찾을수 없다고 나오고 .. 오류나서 ;;; 멀 잘못했나 싶었는데 ;;;;

    // 파싱 시작
    [TBXML tbxmlWithURL:weatherURL success:tbxmlSuccessBlock failure:tbxmlFailureBlock];

    이걸로 바꾸니깐 잘 되네요 ;;......newTBXMLWithURL 로 쓸려면 HTTP파일에 있는 것들도 다 바꿔야 하는건가요???

  10. 깊은물 2013.07.07 16:45  댓글주소  수정/삭제  댓글쓰기

    제가 버스 어플 만들어 볼라구 아이맥도 사고 xcode도 보고 어언 2년 가까이 되는데요

    야곰님의 xml파싱을 그대로 따라해서 빌드했는데..에러도 안뜨고 로그도 안나오는 상황이 되었습니다.

    뭐가 문제인지 봐주시면 정말 고맙겠습니다.

    테이블뷰에 뿌리기도 전에 로그가 안나타나요..흑흑..

    일단 xml parser 2차시 까지 따라서 소스 입력해 보았습니다.

    소스를 보여 드리고 싶은데

    파일 첨부하는 데가 없네요

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.07 16:36 신고  댓글주소  수정/삭제

      이 포스팅 자체가 오래된거라, TBXML 라이브러리도 좀 바뀌었을 것고... iOS 버전에도 변화가 많습니다 ^^;

      지금 아마 제대로 동작을 하지 않을 것 같습니다~

  11. 깊은물 2013.07.07 16:52  댓글주소  수정/삭제  댓글쓰기

    NSString *localStr=[itemDic objectAtIndex:@"local"];
    NSString *descStr=[itemDic objectAtIndex:@"desc"];
    NSString *taStr=[itemDic objectAtIndex:@"ta"];


    에서 빨간줄이 3줄 에러납니다.
    No visible @interface for 'NSDictionary' declares the selector 'objectAtIndex'

    http://cafe.naver.com/mcbugi/274136에 첨부파일2개 올렸습니다.
    2번째 첨부파일 보시고 가르침을 주십시오...


    왜 그럴까요? 흑흑...

  12. mainrichoo 2013.08.21 04:52  댓글주소  수정/삭제  댓글쓰기

    질문이 있어서 글 남깁니다...
    일단....tbxml버전 업뎃이 왜 안되지 왜 안되지 하면서 고생했네요..ㅠㅠㅠ

    일단 블럭코딩...혹이거 배울수 있는 강좌 좌표가 있으면 부탁좀드릴게요..ㅠㅠ

    그리고 중간에 ARC를 가능하게 해버리면 미리 작업해놓았던 ARC없이 짠 코드들에 영향을 주나요?
    예전에 ARC 설정하고 dealloc해버리면 오류났던것 같은데...궁금합니다...

  13. 콜필드 2013.08.24 00:42  댓글주소  수정/삭제  댓글쓰기

    안녕하세요, 아이폰 앱 개발 중에 이 포스팅 발견하고 안도의 한숨을 쉬고 있습니다. 감사합니다.

    그런데 궁금한 점이 있는데, 이렇게 xml으로 저장된 데이터들을 테이블뷰에 뿌려줄 때, 그 데이터 양이 많아지면 문제는 없나요?

    예를 들어 항목이 1천개가 넘어가면 말이죠...

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.08.24 13:12 신고  댓글주소  수정/삭제

      안녕하세요 콜필드님 :)

      저도 iOS에서 테이블을 처음 쓸 때 그런 걱정을 했더랬죠..ㅎㅎ

      하지만, 우리가 보이기에 테이블이 엄청나게 길어 보이지만 실상은 Cell을 계속해서 화면에 다시 세팅해 주는 것이랍니다.

      이해가 되셨을까요..?

      즉, 테이블에 담을 데이터는 우리가 가지고 있지만 (string 데이터라고 해봐야 몇 천 몇 만개라도 메모리에 차지하는 영역은 별로 없다고 보시면 됩니다) 정작 화면에 보여주고 메모리에 올라와 있는 셀은 딱 우리가 보고있는 그 셀들 밖에 없다는 것이지요...

      음... 그래서 cell reuse identifier 이 있어야 하는 것이구요.
      음... 말로 하려니까 정말 어렵네요^^;

      조금 더 검색 해보시면 좋은 자료들이 나올 것 같아요.

      더 궁금하신 것이 있으면 언제든 말씀해 주세요 :)

      행복한 주말 되시길 빕니다!