繁体   English   中英

如何提取具有最多的父元素的元素内容<p>标签

[英]How to extract Element contents of a parent element having most <p> Tag

我有一个包含以下类的 html 文件,但我只需要提取数量比任何其他类最多的 <p> 标记。

像 <div class="text"> 有 18 个 <p> 标签, <div class="another-text"> 有 3 个 <p> 标签, <div class="another-another-text"> 有 2 个 <p>标签。 我需要提取 <div class="text"> 类中的 <p> 标签。

<body>
    <div class="text">
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <p>...</p>
    </div>

  <div class="another-text">
    <p>...</p>
    <p>...</p>
    <p>...</p>
  </div>

  <div class="another-another-text">
    <p>...</p>
    <p>...</p>
  </div>
</body>

由于 php 中的 xpath 支持限制,您将不得不求助于:

$html= 
'[your html above]

';
$HTMLDoc = new DOMDocument();
$HTMLDoc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD );   
$xpath = new DOMXPath($HTMLDoc);

#locate the 3 divs
$pees = $xpath->query('//div[.//p]');
$pchilds = [];

#get the number of p children in each div
foreach ($pees as $pee) {
    $childs = $pee->childElementCount;
    array_push($pchilds,$childs);}

#now find the div with the max number of p children
foreach ($pees as $pee) {
    $childs = $pee->childElementCount;
    if ($childs == max($pchilds))
       echo ($pee->nodeValue);
       #or do whatever
}

仅供参考,在 xpath 2.0 支持下,这可以通过一行 xpath 表达式来完成:

//div[count(.//p) = max(//div/count(.//p))]

如果 div在同一个父级中,则可以通过此 XPath 完成:

//div[count(p) &gt; count(preceding-sibling::div/p) and count(p) &gt; count(following-sibling::div/p)] 

如果 div不在同一个父级中,则可以通过此 XPath 完成:

//div[count(p) &gt; count(preceding::div/p) and count(p) &gt; count(following::div/p)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM