PHP DOM遍历HTML节点和子节点

PHP DOM遍历HTML节点和子节点,php,parsing,dom,html-parsing,domdocument,Php,Parsing,Dom,Html Parsing,Domdocument,我正在使用一些代码从HTML页面中选择所有标记: $dom = new DOMDocument; $dom->loadHTML($html); foreach ($dom->getElementsByTagName('td') as $node) { $array_data[ ] = $node->nodeValue; } 这将数据精细地存储在我的数组中 正在查看的html数据是: <tr> <td>DATA 1</td> <td&g

我正在使用一些代码从HTML页面中选择所有标记:

$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>
我想要的输出是将代码从

我已使用此代码选择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;
   }
任何对其他阅读材料的帮助或指点都将不胜感激! 谢谢

您应该检查td是否有孩子。使用getElementsByTagName选择锚定标记,并检查所选内容是否具有content using属性。如果td在子级中有锚点,则使用获取它的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;
}
请参见

您应该检查td是否有孩子。使用getElementsByTagName选择锚定标记,并检查所选内容是否具有content using属性。如果td在子级中有锚点,则使用获取它的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;
}

请参见

我发布了解决您问题的答案。那个么你们为什么改变问题呢?你有什么问题?谢谢你的解决方案,穆罕默德。我正在阅读其他SO帖子,同时也在寻找解决方案。一旦我在SO帖子上找到了一些东西,我就在我的问题中发布了更新的代码。我发布了解决您问题的答案。那个么你们为什么改变问题呢?你有什么问题?谢谢你的解决方案,穆罕默德。我正在阅读其他SO帖子,同时也在寻找解决方案。一旦我在SO帖子上找到了一些东西,我就在我的问题中发布了更新的代码。