문제

누구든지 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에 프로젝트에 포함됩니다

  1. 메뉴 프로젝트-> 프로젝트 설정 편집
  2. "헤더 검색 경로"설정 검색
  3. 새 검색 경로 추가 "$ {SDKROOT}/usr/include/libxml2"
  4. 재귀 옵션을 활성화합니다

-프로젝트에 대한 Libxml2 라이브러리

  1. 메뉴 프로젝트-> 프로젝트 설정 편집
  2. "기타 링커 플래그"설정 검색
  3. 새 검색 플래그 추가 "-lxml2"

-에서 hpple 다음 소스 코드 파일을 가져 와서 프로젝트에 추가하십시오.

  1. tfpple.h
  2. tfpple.m
  3. tfppleElement.h
  4. tfppleElement.m
  5. xpathquery.h
  6. 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 주위에 가벼운 래퍼를 썼다.

대상 C-HMTL-PARSER

이것은 아마도 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 웹 서비스를 모바일 앱으로 반환합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top