當前位置: 首頁> 最新文章列表> 如何在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