iPhone에서 HTML을 구문 분석 [폐쇄
-
03-07-2019 - |
문제
누구든지 HTML 파싱을 위해 C 또는 Objective-C 라이브러리를 추천 할 수 있습니까? 유효성이없는 지저분한 HTML 코드를 처리해야합니다.
그러한 라이브러리가 존재합니까, 아니면 정규 표현식을 사용하려고하는 것이 더 낫습니까?
해결책 2
보입니다 libxml2.2
SDK에옵니다 libxml/HTMLparser.h
다음을 주장합니다.
이 모듈은 XML 파서와 호환되는 API와 함께 HTML 4.0 비 관습 파서를 구현합니다. 사양 관점에서 심하게 깨지더라도 "실제 세계"HTML을 구문 분석 할 수 있어야합니다.
그것은 내가 필요한 것 같아서 아마 그것을 사용할 것입니다.
다른 팁
사용을 찾았습니다 hpple 지저분한 HTML을 구문 분석하는 데 매우 유용합니다. HPPLE Project는 HTML을 구문 분석하기위한 XPathQuery 라이브러리의 목표 C 래퍼입니다. 이를 사용하면 xpath 쿼리를 보내고 결과를받을 수 있습니다.
요구 사항:
-add libxml2에 프로젝트에 포함됩니다
- 메뉴 프로젝트-> 프로젝트 설정 편집
- "헤더 검색 경로"설정 검색
- 새 검색 경로 추가 "$ {SDKROOT}/usr/include/libxml2"
- 재귀 옵션을 활성화합니다
-프로젝트에 대한 Libxml2 라이브러리
- 메뉴 프로젝트-> 프로젝트 설정 편집
- "기타 링커 플래그"설정 검색
- 새 검색 플래그 추가 "-lxml2"
-에서 hpple 다음 소스 코드 파일을 가져 와서 프로젝트에 추가하십시오.
- tfpple.h
- tfpple.m
- tfppleElement.h
- tfppleElement.m
- xpathquery.h
- xpathquery.m
-걷기를 계속하십시오 W3School XPath 튜토리얼 XPath 언어에 익숙해지기 위해.
코드 예제
#import "TFHpple.h"
NSData *data = [[NSData alloc] initWithContentsOfFile:@"example.html"];
// Create parser
xpathParser = [[TFHpple alloc] initWithHTMLData:data];
//Get all the cells of the 2nd row of the 3rd table
NSArray *elements = [xpathParser searchWithXPathQuery:@"//table[3]/tr[2]/td"];
// Access the first cell
TFHppleElement *element = [elements objectAtIndex:0];
// Get the text within the cell tag
NSString *content = [element content];
[xpathParser release];
[data release];
알려진 문제
hpple은 또 다른 래퍼 인 xpathquery의 래퍼이기 때문에이 옵션은 아마도 가장 효율적이지 않을 것입니다. 프로젝트에서 성능이 문제 인 경우 HPPLE 및 XPathQuery 라이브러리 코드를 기반으로 자신의 경량 솔루션을 코딩하는 것이 좋습니다.
멋진 XPath 파서를 위해 인터넷 검색을 통해 여기에 도착한 경우 TFHPPLE을 사용한 경우 TFHPPLE은 XPathQuery를 사용합니다. 이것은 꽤 좋지만 메모리 누출이 있습니다.
함수 *performxpathQuery에서 노드가 nil 인 경우 정리하기 전에 뛰어납니다.
따라서이 코드가 표시되는 경우 두 개의 정리 라인을 추가하십시오.
xmlNodeSetPtr nodes = xpathObj->nodesetval;
if (!nodes)
{
NSLog(@"Nodes was nil.");
/* Cleanup */
xmlXPathFreeObject(xpathObj);
xmlXPathFreeContext(xpathCtx);
return nil;
}
당신이 많은 구문 분석을하고 있다면, 그것은 악의적 인 누출입니다. 이제 .... 어떻게 내 밤을 되 찾을 수 있습니까 :-)
나는 libxml 주위에 가벼운 래퍼를 썼다.
이것은 아마도 HTML이 얼마나 지저분하고 추출하고 싶은지에 달려 있습니다. 그러나 보통 깔끔한 꽤 좋은 일을합니다. 그것은 C로 작성되었으며 iPhone을 위해 그것을 구축하고 정적으로 연결할 수 있어야한다고 생각합니다. 명령 줄 버전을 쉽게 설치하고 결과를 먼저 테스트 할 수 있습니다.
ElementParser를 확인할 수 있습니다. HTML 및 XML의 "충분한"구문 분석을 제공합니다. 좋은 인터페이스는 XML / HTML 문서를 매우 간단하게 걷는다. http://touchtank.wordpress.com/
WebKit 구성 요소 및 이와 같은 작업을위한 jQuery와 같은 타사 패키지를 사용하는 것은 어떻습니까? 보이지 않는 구성 요소에서 HTML 데이터를 가져오고 JavaScript 프레임 워크의 매우 성숙한 선택기를 활용할 수 없습니까?
Google의 GDATA Objective-C API는 NSXMLELENT 및 Apple이 iPhone SDK에서 제거한 기타 관련 클래스를 상환합니다. 여기에서 찾을 수 있습니다 http://code.google.com/p/gdata-objectivec-client/. Jabber를 통해 메시지를 처리하는 데 사용했습니다. 물론 HTML이 기형 (닫는 태그 누락)이면 큰 도움이되지 않을 수 있습니다.
우리는 Convertigo를 사용하여 서버 측에서 HTML을 구문 분석하고 깨끗하고 깔끔한 JSON 웹 서비스를 모바일 앱으로 반환합니다.