删除除分支以外的所有DOM儿童PHP
问题描述:
我有一个DOM(结构无关)。删除除分支以外的所有DOM儿童PHP
<g>
<svg>
<g><path/></g>
<g><circle/></g>
</svg>
</g>
我需要删除所有没有path
元素的svg子元素。
答
jQuery中:
$("g > svg > g:not(path)").remove();
答
您可以使用此XPath表达式:
//svg[not(.//path)]
这将让所有svg
元素没有path
后裔。
您还可以使用
//svg/*[not(.//path)]
只得到svg
元素是不属于path
实际的孩子。
然后,只需从XML删除所有比赛:
$dom = new DOMDocument();
$dom->loadXML($doc);
$x = new DOMXPath($dom);
$toDelete = $x->query("//svg[not(.//path)]");
foreach ($toDelete as $child) {
$child->parentNode->removeChild($child);
}
var_dump($dom->saveXML());
编辑从路径元素改为不带路径元素,感谢@ splash58的抬起头
这似乎是一个很好的JavaScript答案,但要小心;这无助于提问者(这可能是为什么它被低估)。请注意,他们用PHP标记了这个问题,所以他们正在寻找一种方法在PHP中实现这一点。 –