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