2011-02-04 2 views
0

데이터 테이블이있는 큰 HTML 문서가 많이 있는데, HTML 파일을 처리하고 태그와 그 내용을 분리 한 다음 모든 것을 연결하는 스크립트를 작성하려고합니다. 이 테이블 내의 행을 하나의 큰 데이터 테이블로 변환합니다. 그런 다음 새 큰 테이블의 행과 열을 반복합니다.PHP DOMDocument와 HTML 테이블 연결하기

일부 연구 끝에 PHP의 DOMDocument 클래스를 사용하여 HTML을 파싱하기 시작했으나 이제 막 알고 싶습니다. 이렇게하는 것이 가장 좋은 방법입니까?

이것은 내가 지금까지있어 무엇 ...

$dom = new DOMDocument(); 
$dom->preserveWhiteSpace = FALSE; 
@$dom->loadHTMLFile('exrate.html'); 
$tables = $dom->getElementsByTagName('table');

어떻게 테이블과 그 내용 이외의 모든 것을 잘라합니까? 그런 다음 실제로 목차이므로 첫 번째 표를 제거하고 싶습니다. 그런 다음 모든 테이블 행을 반복하여 하나의 큰 테이블로 구성하십시오.

누구나이 작업을 수행하는 방법에 대한 힌트가 있습니까? php.net에서 DOMDocument의 문서를 파고 들었지만 문법이 꽤 당황 스럽습니다!

건배, B

편집 : 여기에 내가 좋아 그것이 phpQuery 시행 착오를 많이 분류되어있어 http://thenetzone.co.uk/exrates/exrate.html

+0

음, DOMDocument는 끔찍합니다. phpQuery 또는 QueryPath 또는 다른 [HTML 구문 분석에 가장 적합한 메소드] 중 하나를 사용해보십시오 (http://stackoverflow.com/questions/3577641/best-methods-to-parse-html). 하지만 내 두 번째 조언은 HTML 테이블에서 행을 추출하기 위해보다 단순한 regex 클래스 중 하나를 사용하는 것이 좋습니다. – mario

+0

문서의 HTML 코드를 붙여 넣을 수 있습니까? & DOMDocument 대신 PHP 간단한 HTML DOM 파서는 코딩 및 성능 문제를 쉽게 해결할 수 있습니다. [link] (http://simplehtmldom.sourceforge.net/manual.htm) – risyasin

+0

죄송합니다. HTML 파일에 동일한 열과 열 순서가있는 여러 개의 표가 있지만 각 표 사이에 여러 개의 단락으로 구분되어 있어야합니다. . 필자는 phpQuery를 살펴볼 것입니다. DOMDocument를 조합하기가 어려운 유일한 사람이 아닌 것을 기쁘게 생각합니다. phpQuery 또는 QueryPath를 사용하여 DOMDocument에 래퍼를 사용하는 아이디어를 좋아합니다. 여기에 HTML 코드 샘플이 있습니다 ... (http://thenetzone.co.uk/exrates/exrate.html) – batfastad

답변

0

에 참여하고자하는 데이터 테이블과 HTML 파일의 샘플입니다.
그래서 전체 테이블을 가져 와서 내용을 첫 번째 테이블로 옮기고 빈 테이블을 제거합니다.
그런 다음 각 테이블 행을 반복하고 특정 열 (이 경우 각 행의 두 번째 및 세 번째 행)에서 텍스트를 추출합니다.

require('phpQuery/phpQuery.php'); 
$doc = phpQuery::newDocumentFileHTML('exrates_code.html'); 
pq('table:first')->remove();// REMOVE FIRST TABLE, JUST A CONTENTS TABLE SO NOT INTERESTED 
pq('tr:has(th)')->remove();// REMOVE TABLE ROWS THAT ARE HEADERS 
pq('table:not(:first) tr')->appendTo('table:first');// MOVE CONTENTS OF OTHER TABLES TO FIRST 
pq('table:empty')->remove();// REMOVE EMPTY TABLES 
pq('br')->remove(); 

$rows = pq('table tr'); 
foreach ($rows as $row) { 
    $currency = pq($row)->find('td:eq(1)')->text(); 
    $value = pq($row)->find('td:eq(2)')->text(); 
}

희망이 있으면 도움이 될 것입니다.