仅从 html 中提取第一级段落


Extract only first level paragraphs from html

我有以下html:

<div id="myID">
  <p>I want this</p>
  <p>and I want this</p>
  <div>
    <p>I don't want this</p>
  </div>
</div>

我只想提取第一级<p>...</p>元素。

我尝试使用出色的simple_html_dom库,例如 $html->find('#myID p')但在上面的情况下,这找到了所有三个<p>...</p>元素

有没有更好的方法可以做到这一点?

与其使用一些外部库,为什么不直接使用内置类来处理 dom?

首先使用 HTML 创建一个 DOMDocument 实例:

$dom = new DOMDocument();
$dom->loadHtml($yourHtml);

之后,使用 DOMXPath 选择您的元素:

$xpath = new DOMXpath($dom);
$nodes = $xpath->query("//*[@id='myID']/p");
var_dump($nodes->length); // outputs 2

这将选择所有p元素,这些元素是 id 为 myID 的元素的直接子元素。演示