在进行网页抓取或HTML内容解析时,提取某个元素的子节点是一项非常常见的操作。PHP 提供了多种处理 HTML 的方式,其中使用 DOMDocument 结合 DOMElement 是较为标准且强大的方法。不过,如果你使用的是 simple_html_dom 这样的第三方库,则可以更方便地通过 children() 函数来获取子节点。
children() 是 simple_html_dom 库中提供的方法,它用于获取某个 HTML 元素的所有子元素(不包括文本节点)。这个方法返回一个由子节点构成的数组或特定索引的子节点。
<span><span><span class="hljs-tag"><<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>>
</span><span><span class="hljs-tag"><<span class="hljs-name">p</span></span></span><span>>第一段</span><span><span class="hljs-tag"></<span class="hljs-name">p</span></span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">p</span></span></span><span>>第二段</span><span><span class="hljs-tag"></<span class="hljs-name">p</span></span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">span</span></span></span><span>>一个 span</span><span><span class="hljs-tag"></<span class="hljs-name">span</span></span></span><span>>
</span><span><span class="hljs-tag"></<span class="hljs-name">div</span></span></span><span>>
</span></span>
你首先需要从 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>
可以从字符串、文件或 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">'<div id="content"><p>第一段</p><p>第二段</p><span>一个 span</span></div>'</span></span><span>);
</span></span>
<span><span><span class="hljs-variable">$div</span></span><span> = </span><span><span class="hljs-variable">$html</span></span><span>-></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>-></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>->tag . </span><span><span class="hljs-string">': '</span></span><span> . </span><span><span class="hljs-variable">$child</span></span><span>->innertext . </span><span><span class="hljs-string">"<br>"</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>-></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>->tag; </span><span><span class="hljs-comment">// 输出: p</span></span><span>
</span></span>
children() 只获取子元素节点,不包括文本节点或注释。
若要遍历所有后代节点(不仅是直接子节点),可以使用 find('*')。
使用 simple_html_dom 时请确保处理外部输入的 HTML 安全,避免 XSS 或其他注入风险。
使用 children() 函数可以方便地获取某个 HTML 元素下的所有子节点,这在需要提取结构化数据时非常实用。结合 simple_html_dom,你可以快速解析并操作复杂的 HTML 文档,极大提高开发效率。对于需要更强大 DOM 操作能力的场景,推荐了解 PHP 内建的 DOMDocument 类,它提供了更多控制与灵活性。
相关标签:
HTML