删除特定的类domdocument

时间:2018-08-16 14:18:36

标签: php domdocument

我在dom文档中有此内容

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

我想删除该类的所有范围。所以我尝试了:

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

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

但是这也会删除父元素(div元素)。如何删除跨度元素?

1 个答案:

答案 0 :(得分:1)

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