2012-04-07 2 views
1

나는 하루 종일 고민 중입니다.PHP domdocument 또는 domxpath : TR을 추출하고 html을 저장하는 방법

문자열에 html 테이블이 있습니다. <TD> 내부

<TABLE> 
    <TBODY> 
    <TR CLASS=dna1> 
     <TD></TD><TD></TD><TD></TD><TD></TD> 
    </TR> 
    <TR CLASS=dna2> 
     <TD></TD><TD></TD><TD></TD><TD></TD> 
    </TR> 
    repeat... 

내가 작업해야 할 몇 가지 <DIV>와 <SPAN> 있습니다.

<TR> (두 클래스 모두)을 추출하고 각각 <TR>이 배열 요소 인 배열에 html을 저장해야합니다.

노드 목록 배열을 만드는 것은 쉽지만 실제로 html을 얻는 방법은 무엇입니까? 당신이 문자열로 HTML을 저장해야하는 경우

+0

왜 당신이 배열에 HTML을 저장 하시겠습니까? DOMElement를 저장하는 것으로 충분하지 않습니까? – Tomalak

+0

@Tomalak 왜냐하면 서식과 태그를 보존해야하기 때문입니다. – user191688

+1

하지만 DOMElement는 모든 속성을 보존 할 것입니다 ... – Tomalak

답변

3

, DOMDocument::saveHTML

$elems = $xpath->query('//tr'); 

foreach ($elems as $elem) { 
    $array[] = $doc->saveHTML($elem); 
} 

이 (saveHTML에 대한 매개 변수는 PHP 5.3.6의로 사용할 수 있습니다.)

내가 좋겠 그래도 노드를 저장하는 것이 좋으며 출력하기 직전에 문자열로 변환하는 것이 좋습니다.

+1

그게 내가 잘못한 것입니다. 나는 saveHTML()을 사용하고 있었다. 감사! – user191688

+0

내 대안을 DOMDocument 만 사용하십시오 – RafaSashi

+0

이미 투표를 마쳤습니다. 나는 당신보다 앞서 있습니다. OP는 명시 적으로 DOMXPath를 명시했지만 * 정확하게 노드를 선택하는 방법은 실제로이 질문에 대해 보조입니다. – Tomalak

1

또는 단지 DOMDocument를 사용하여 :

$dom = new DOMDocument(); 
@$dom->loadHTML($html); 

if($table=$dom->getElementsByTagName('table')->item(0)){ 

    //traverse the table and output every rows 

    $rows=array(); 
    foreach ($table->childNodes as $row){ 

     $rows[]=$dom->saveHTML($row); 

    } 
} 
관련 문제