2012-07-07 6 views
0

방금 ​​XPath에 대해 배웠고 테이블의 특정 열에서 데이터를 읽으려고합니다.PHP XPath 테이블 요소가 사라짐

나의 현재 코드는 다음과 같습니다 : I 중첩 테이블 요소와 관련된 문제를 많이 보았다 또한

<?php 

$file_contents = file_get_contents('test.html'); 

$dom_document = new DOMDocument(); 

$dom_document->loadHTML($file_contents); 

//use DOMXpath to navigate the html with the DOM 
$dom_xpath = new DOMXpath($dom_document); 

$elements = $dom_xpath->query("//tr[@class='rowstyle']"); 

if (!is_null($elements)) { 
    foreach ($elements as $element) 
    { 
     echo $element->nodeValue . '<br />'; 
    } 
} 
else 
{ 
    echo 'none'; 
} 

?> 

쿼리의 변화 때문에 내 연구를 통해

하지만 동일한 결과를 생성합니다

$elements = $dom_xpath->query("//table[@class='tablestyle']/tbody/tr[@class='rowstyle']"); 

데이터 행을 가져 오지만 모든 문자열을 하나로 묶어 하나의 문자열로 만들고 태그를 사라지게 만듭니다.

내가 정말로하고 싶은 것은 그 셀을 분리하고 특정 행 번호를 얻는 것입니다.

나는 내가 가진의 XPath의 버전을 확인하는 방법도 궁금합니다 ... 내 PHP 버전은 5.3.5

답변

1

그것의 그 세포를 결합하지 ... 출력 개봉이 경우에있는 nodeValueinnerHTML처럼 행동합니다. 셀 자체에서 작업하려면 childNodes 또는 행을 컨텍스트로 사용하는 xpah 쿼리를 사용하고 셀을 반복합니다.

예 : 해명

$dom_xpath = new DOMXpath($dom_document); 

$elements = $dom_xpath->query("//tr[@class='rowstyle']"); 
foreach ($elements as $element) 
{ 
    foreach($element->childNodes as $cell) { 
    echo $cell->nodeValue . '<br />'; 
    } 

} 
+0

감사합니다! 또한 유효하지 않은 인수에 문제가있어서 미래의 구경꾼에게 내부 foreach 루프 주위에서 if ($ element-> hasChildNodes())를 사용하도록 제안합니다. – MLM