当前位置: 首页> 最新文章列表> 如何在 PHP 中使用 children 函数提取 HTML DOM 元素的子节点?

如何在 PHP 中使用 children 函数提取 HTML DOM 元素的子节点?

M66 2025-08-11

在进行网页抓取或HTML内容解析时,提取某个元素的子节点是一项非常常见的操作。PHP 提供了多种处理 HTML 的方式,其中使用 DOMDocument 结合 DOMElement 是较为标准且强大的方法。不过,如果你使用的是 simple_html_dom 这样的第三方库,则可以更方便地通过 children() 函数来获取子节点。

什么是 children() 函数?

children()simple_html_dom 库中提供的方法,它用于获取某个 HTML 元素的所有子元素(不包括文本节点)。这个方法返回一个由子节点构成的数组或特定索引的子节点。

示例 HTML

<span><span><span class="hljs-tag">&lt;<span class="hljs-name">div</span></span></span><span> </span><span><span class="hljs-attr">id</span></span><span>=</span><span><span class="hljs-string">"content"</span></span><span>&gt;
    </span><span><span class="hljs-tag">&lt;<span class="hljs-name">p</span></span></span><span>&gt;第一段</span><span><span class="hljs-tag">&lt;/<span class="hljs-name">p</span></span></span><span>&gt;
    </span><span><span class="hljs-tag">&lt;<span class="hljs-name">p</span></span></span><span>&gt;第二段</span><span><span class="hljs-tag">&lt;/<span class="hljs-name">p</span></span></span><span>&gt;
    </span><span><span class="hljs-tag">&lt;<span class="hljs-name">span</span></span></span><span>&gt;一个 span</span><span><span class="hljs-tag">&lt;/<span class="hljs-name">span</span></span></span><span>&gt;
</span><span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span></span></span><span>&gt;
</span></span>

如何使用 children() 提取子节点?

步骤 1:引入 simple_html_dom

你首先需要从 GitHub 或其官网引入该库:

<span><span><span class="hljs-keyword">include</span></span><span>(</span><span><span class="hljs-string">'simple_html_dom.php'</span></span><span>);
</span></span>

步骤 2:加载 HTML

可以从字符串、文件或 URL 中加载 HTML。

<span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_get_html</span></span><span>(</span><span><span class="hljs-string">'&lt;div id="content"&gt;&lt;p&gt;第一段&lt;/p&gt;&lt;p&gt;第二段&lt;/p&gt;&lt;span&gt;一个 span&lt;/span&gt;&lt;/div&gt;'</span></span><span>);
</span></span>

步骤 3:选择目标元素并使用 children()

<span><span><span class="hljs-variable">$div</span></span><span> = </span><span><span class="hljs-variable">$html</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">find</span></span><span>(</span><span><span class="hljs-string">'div#content'</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>); </span><span><span class="hljs-comment">// 获取第一个 id 为 content 的 div</span></span><span>
</span><span><span class="hljs-variable">$children</span></span><span> = </span><span><span class="hljs-variable">$div</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">children</span></span><span>();         </span><span><span class="hljs-comment">// 获取所有子节点</span></span><span>

</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$children</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$child</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$child</span></span><span>-&gt;tag . </span><span><span class="hljs-string">': '</span></span><span> . </span><span><span class="hljs-variable">$child</span></span><span>-&gt;innertext . </span><span><span class="hljs-string">"&lt;br&gt;"</span></span><span>;
}
</span></span>

输出将会是:

<span><span><span class="hljs-section">p: 第一段  </span></span><span>
</span><span><span class="hljs-section">p: 第二段  </span></span><span>
</span><span><span class="hljs-section">span: 一个 span  </span></span><span>
</span></span>

获取指定索引的子节点

children() 方法还可以接受一个参数,用于获取特定索引的子节点。

<span><span><span class="hljs-variable">$firstChild</span></span><span> = </span><span><span class="hljs-variable">$div</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">children</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$firstChild</span></span><span>-&gt;tag; </span><span><span class="hljs-comment">// 输出: p</span></span><span>
</span></span>

注意事项

  1. children() 只获取子元素节点,不包括文本节点或注释。

  2. 若要遍历所有后代节点(不仅是直接子节点),可以使用 find('*')

  3. 使用 simple_html_dom 时请确保处理外部输入的 HTML 安全,避免 XSS 或其他注入风险。

总结

使用 children() 函数可以方便地获取某个 HTML 元素下的所有子节点,这在需要提取结构化数据时非常实用。结合 simple_html_dom,你可以快速解析并操作复杂的 HTML 文档,极大提高开发效率。对于需要更强大 DOM 操作能力的场景,推荐了解 PHP 内建的 DOMDocument 类,它提供了更多控制与灵活性。

  • 相关标签:

    HTML