simple_html_dom 解析器:过滤找到标记

simple_html_dom parser : filter found tag

我想解析结构如下的代码:

<p class=class1>
 <i>.</i>
 <b>..</b>
<a class=class2></a>
</p>

我需要获取 <p> 的全部内容,但只需要不带 <a> 标签。我需要保留所有其他标签,例如 <i><b> 我该怎么做?

现在我只有这段代码:

 $content = $page->find('p[class=class1]');
 foreach($content as $text)
  {
    $inner=$text->innertext();
  }    

它能够找到带有 <a> 标签的全部内容。并且

您可以循环子节点并检查 nodeName()。如果那是 a,您可以将 outertext 设置为空字符串:

这样试试:

$data = <<<DATA
<p class=class1>
 content
 <div>test</div>
 <i>.</i>
 <b>..</b>
<a class=class2></a>
</p>
DATA;
$html = str_get_html($data);

foreach($html->find('p.class1') as $element) {
    foreach ($element->children as $child) {
        if ($child->nodeName() === "a") {
            $child->outertext = '';
        }
    }
}

echo $html->save();

那会给你:

<p class=class1> content <div>test</div> <i>.</i> <b>..</b> </p>

或者如果您想删除所有(嵌套的)锚点:

foreach ($html->find('p.class1 a') as $element) {
    $element->outertext = '';
}