PHP DOM遍历HTML个节点和子节点

PHP DOM traverse HTML nodes and childnode

我正在使用一些代码从 HTML 页面中挑选出所有 <td> 标签:

$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 returns:

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 很陌生,如果这看起来是个愚蠢的问题,我很抱歉。

我读过 link: 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;
   }

对于其他阅读 material 的任何帮助或指示将不胜感激!
谢谢

您应该检查 tda child。 Select 锚标记使用 getElementsByTagName() 并使用 length property. If the td has anchor in child, use 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