删除特定 class 个 domdocument

Remove specific class domdocument

我在 dom 文档中有这个:

<div><span class="hello"></span><div>

我想删除所有 class 的跨度。所以我尝试了:

$xpath = new DOMXPath($doc);
$elements = $xpath->query('//span[@class="hello"]/..');

foreach ($elements as $el) {
  $el->parentNode->removeChild($el);
}

但这也会删除父元素(div 元素)。我怎样才能 删除 span 元素?

XPath 选择器末尾的 /.. 正在选择父元素,而不是 <span> 本身 - .. 意味着工作一个级别备份树,与在目录路径中相同。所以在你的循环中,你说 parentNode->removeChild,你实际上是在删除 div,因为 $el 已经是跨度的父元素。

如果您只是从选择器的末尾删除 /..,代码应该可以正常工作。

$xpath = new DOMXPath($doc);
$elements = $xpath->query('//span[@class="hello"]');

foreach ($elements as $el) {
    $el->parentNode->removeChild($el);
}

完整示例:https://3v4l.org/o4dRv