-
HTML 오픈소스 parser - TFHppe프로그래밍/아이폰 2011. 4. 4. 01:05HTML parsing with iOS / OSX
가끔씩 이지만, HTMl파싱이 필요할때가 있습니다.
정규식을 이용하시거나, 직접 노드를 순회해서 파싱을 해도 좋지만
쓰라고 만들어 주신 클래스가 이미 있고,
그게 또 썩 괜찮게 작동해 주고 있으니 사용하는 미덕을 가져봅시다.
단, 조건이 있습니다.
- html 스크립트가 규정대로 작성되어 있을것.
- 세션/쿠키는 알아서 잘 처리할것.
- xPath에 대해 대충은 찾아볼것.
제멋대로 작성된 html 이라면 직접 파싱하시는것 외에는 방법이 없습니다.
정상적인 html일지라도,
가능하면, 웹개발자에게 연동가능한 api 를 만들어 주십사 요청하십시오.
html 파싱으로 작동하는 앱은 언제 폭파될지 잡스아저씨도 모릅니다.
간략히 -
1. 프로젝트 설정의 'Header search Paths' 에
${SDKROOT}/usr/include/libxml2 를 추가하고 Recursive에 체크합니다.
2. 프로젝트 설정의 'Other Linker Flags'에
-lxml2 를 추가합니다.
3. git://github.com/topfunky/hpple.git를 클론합니다.
(git 사용법을 잘 모르겠다 싶으신 분은 http://github.com/topfunky/hpple로
가셔서 그냥 다운로드 하셔도 됩니다)
4. 아래 클래스들을 프로젝트로 복사합니다.
TFHpple.h TFHpple.m TFHppleElement.h TFHppleElement.m XPathQuery.h XPathQuery.m
사용 합니다. The end. ...
라고 하면 좀 서운하실까봐
#import "TFHpple.h"
...
NSURL *dataURL = [NSURL URLWithString:@"http://www.yourDomain.com"];
NSString *htmlString = [[NSString stringWithContentsOfURL:dataURL
encoding:YOUR_SITE_ENCODING error:nil]stringByReplacingOccurrencesOfString:@"<br>" withString", "];
NSData *data = [htmlString dataUsingEncoding:NSUnicodeStringEncoding];
TFHpple *htmlParser = [[TFHpple alloc] initWithHTMLData:data];
NSArray *elements = [htmlParser search:"xPath node"];
TFHppleElement *element = [elements objectAtIndex:0];
...
빨간 볼드의 자리는 사용하시는대로 바꾸어야 합니다.
xPath node의 자리에 원하는 탐색 노드를 넣고 검색한뒤에
마지막 TFHppleElent *element에서 원하는 값 (content, src, alt....)를
꺼내서 사용하면 html파싱완료.
xPath를 전혀 모르시는 분을 위해, search 에 들어갈 값은...
HTML : <a href="www.google.com">google</a>
google을 찾으려면 -
조건 : search:@"//a"
반환 : value = [[elements objectAtIndex:0] content];
결과 : google
www.google.com 을 찾으려면 -
조건 : search:@"//a"
반환 : value = [[[elements objectAtIndex:0] attributes] objectForKey:@"href"];
결과 : www.google.com'프로그래밍 > 아이폰' 카테고리의 다른 글
[iOS] 기기 설정 무시하고 언어 설정하기 (2) 2011.08.31 UIGestureRecognizer in - UITapGestureRecognizer 탭 이벤트를 받자 (0) 2011.04.14 아이폰 로고이미지 작성할때에 (0) 2011.01.02 테이블뷰에서 uitextfield 입력할때 키보드뒤로 가려지지 않게하기 (0) 2010.12.27 웹뷰에서 텍스트파일 깨짐 (0) 2010.12.21 댓글