【问题标题】:Extract only first level paragraphs from html仅从 html 中提取第一级段落
【发布时间】:2015-08-29 06:16:26
【问题描述】:

我有以下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>

我只想提取第一级&lt;p&gt;...&lt;/p&gt; 元素。

我尝试过使用出色的 simple_html_dom 库,例如$html-&gt;find('#myID p') 但在上述情况下,这会找到所有三个 &lt;p&gt;...&lt;/p&gt; 元素

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

【问题讨论】:

  • 尝试在您的选择器中使用children 方法(如果该对象有这样的方法)或&gt;$html-&gt;find('#myID &gt; p')
  • 仍然返回所有段落

标签: php


【解决方案1】:

您为什么不使用一些外部库而不是使用内置类来处理 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 的元素的直接子元素。 Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多