iOS에서 HTML parser인 Hpple 사용하기
틈틈히 iOS 스터디를 하고 있습니다. 간단한 프로젝트성으로 스터디용으로 만들어 보면서 HTML 파서가 필요했습니다. 당연히 엄청 많이 나올줄 알았는데 의외로 HTML 파서가 별로 없더군요. 대부분의 링크들이 거의 같은 얘기를 하고 있었고 SDK에 들어 있는 libxml 을 Wrapping한 Hpple 라이브러리 를 사용하고 있었습니다. 이 라이브러리가 2009년 7월이 마지막 업데이트이소 스스로 실험적인 목적으로 만든거라고 써놓은 것은 충격적이군요 ㅡㅡ;; (다른 분은은 다른 방법이 있는건지 libxml을 직접 쓰시는건지 궁금하군요.)
libxml 추가
Hpple를 쓰기전에 프로젝트에 libxml 을 추가해야 합니다.

메뉴에서 [Project] - [Edit Project Settings]에서 Header Search Paths에 libxml을 셋팅합니다.(위 화면은 셋팅한 다음에 캡쳐해서... ㅎ)

${SDKROOT}/usr/include/libxml2라고 추가해주고 Recursive에 체크해주면 됩니다.

그 다음에 Other Linker Flags에다가 -lxml2을 추가해 줍니다.
Hpple 추가
Hpple는 github 저장소 에서 다운로드를 받거나 소스를 내려받으면 됩니다.

내려받은 파일에서 Hpple프로젝트를 실행한 뒤에 프로젝트내의 Hpple폴더를 자신의 프로젝트로 복사해주면 됩니다. 저같은 경우는 Helpers쪽으로 분류해서 넣었습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
사용법은 어렵지 않습니다. 프로젝트에 추가한 TFHpple.h를 임포트한 뒤에 HTML파일을 TFHpple객체로 만들어서 XPATH로 파싱을 하면 됩니다.(소스에 대부분은 Hpple의 가이드에 있는 소스입니다.) 저도 CSS Selector만 쓰다보니 XPATH는 별로 사용해 보지 않았는데 MSDN문서 에 잘 나와 있습니다.
전 http://cocoawithlove.com/2008/10/using-libxml2-for-parsing-and-xpath.html 에 있는 걸로 썼었는데, xpath iOS로 구글 톱에 뜨네요.
아~ 감사합니다. 저도 찾다보니 libxml에서도 지원가능하다는 것 처럼 써있었는데 따로 못찾았었는데 제가 검색어를 잘못넣었나 보군요.. 이거 한번 테스트해봐야겠네요 ㅎ
내부 툴 만들때 쓴 걸 봤는데 버그 때문에 고생약간 했죠. ㅋㅋ
iOS쪽도 하셨었군요.. 그렇게 앱이 많은데 HTML 파싱 자료가 많지 않은게 신기하네요. 같은 사람인지 모르겠지만 위에 분이 주신 링크도 소스를 보니까 Hpple의 내부 소스와 완전히(심지어 주석까지) 동일하더라구요 ㅎㅎ 저도 간단히 만지는데 다양한 파싱을 하려니 동작이 좀 이상해서 우회해서 쓰고 있어요 ㅎㅎ