在進行網頁抓取或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