2017-04-21 48 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

我張貼的答案解決您的問題。那麼爲什麼你改變了問題?你有什麼問題? – Mohammad

+0

感謝您的解決方案穆罕默德。我正在閱讀其他SO帖子,以便同時找到解決方案。一旦我在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; 
} 

demo