我有一個DOM(結構無關)。刪除除分支以外的所有DOM兒童PHP
<g>
<svg>
<g><path/></g>
<g><circle/></g>
</svg>
</g>
我需要刪除所有沒有path
元素的svg子元素。
我有一個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中實現這一點。 –