我在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元素)。如何仅删除跨度元素?
答案 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);
}