2017-04-21 7 views
0

나는 HTML 페이지에서 모든 <td> 태그를 선택하는 몇 가지 코드를 사용하고 있습니다 :PHP DOM 트래버스 HTML 노드와 childNode에

$dom = new DOMDocument; 
$dom->loadHTML($html); 
foreach ($dom->getElementsByTagName('td') as $node) { 
$array_data[ ] = $node->nodeValue; 
} 

이 내 배열의 데이터 벌금을 저장합니다. 는 HTML 데이터를 바라 보았다되고

은 다음과 같습니다

<tr> 
<td>DATA 1</td> 
<td><a href="12345">DATA 2</a></td> 
<td>DATA 3</td> 
</tr> 

$array_data 반환 :

Array([0])=>DATA 1 [1]=>DATA 2 [2]=> DATA 3) 

내 원하는 출력 페이지에 연결된 <a> 태그에서 코드를 얻을 수 있습니다 . 원하는 출력 :

Array([0])=>DATA 1 [1]=>12345 [2]=>DATA 2 [3]=> DATA 3)

내가 <a>가 자식 노드를 호출 할 것 같아, 나는이 바보 같은 질문을 보이는 경우 죄송 DOM 작업에 아주 새로운 오전.

은 내가 SO 링크를 읽고 : Using PHP dom to get child elements

나는 HREF를 선택하는이 코드를 사용했습니다 : 다른 읽을 거리에 대한

foreach ($dom->getElementsByTagName('td') as $node) { 
     foreach ($node->getElementsByTagName('a') as $node){ 
     $link = $node->getAttribute('href'); 
     echo '<br>'; 
     echo $link; 
     } 
     $array_data[ ] = $node->nodeValue; 
    } 

어떤 도움이나 포인터는 크게 appreicated 될 것입니다!
감사합니다.

+0

demo 내가 문제를 해결하는 답을 게시 참조하십시오. 왜 당신이 질문을 변경 했습니까? 너의 문제는 무엇인가? – Mohammad

+0

솔루션 모하메드에 감사드립니다. 나는 동시에 다른 솔루션을 찾기 위해 다른 게시물을 읽었습니다. 일단 내가 SO 게시물에 뭔가를 찾았 으면 내 질문에 업데이트 된 코드를 게시했습니다. – Jeanclaude

답변

0

tda이 있는지 확인해야합니다. getElementsByTagName()을 사용하여 앵커 태그를 선택하고 length 속성을 사용하여 콘텐츠에 선택 항목이 있는지 확인하십시오. td에 하위에 앵커가있는 경우 getAttribute()을 사용하여 href 속성을 가져옵니다.

$dom = new DOMDocument; 
$dom->loadHTML($html); 
foreach ($dom->getElementsByTagName('td') as $node) { 
    $nodeAnchor = $node->getElementsByTagName("a"); 
    if ($nodeAnchor->length) 
     $array_data[] = $nodeAnchor->item(0)->getAttribute("href"); 
    $array_data[] = $node->nodeValue; 
}