【问题标题】:PHP DOM traverse HTML nodes and childnodePHP DOM 遍历 HTML 节点和子节点
【发布时间】:2017-09-18 11:18:49
【问题描述】:

我正在使用一些代码从 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 返回:

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

我想要的输出是从与页面上的相关联的&lt;a&gt; 标记中获取代码。期望的输出:

Array([0])=&gt;DATA 1 [1]=&gt;12345 [2]=&gt;DATA 2 [3]=&gt; DATA 3)

我认为&lt;a&gt; 会被称为子节点,如果这似乎是一个愚蠢的问题,我对使用 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;
   }

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

【问题讨论】:

  • 我发布了解决您问题的答案。那你为什么改变问题?你有什么问题?
  • 感谢您的解决方案 Mohammed。我正在阅读其他 SO 帖子以同时找到解决方案。一旦我在 SO 帖子上找到了一些东西,我就在我的问题中发布了更新的代码。

标签: php parsing dom html-parsing domdocument


【解决方案1】:

您应该检查tda 孩子。使用getElementsByTagName() 选择锚标记并使用length 属性检查选择是否包含内容。如果td在child中有anchor,使用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

【讨论】:

    猜你喜欢
    • 2020-05-07
    • 2017-09-21
    • 2014-01-11
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    相关资源
    最近更新 更多