2017-10-09 210 views

回答

-2

jQuery中:

$("g > svg > g:not(path)").remove();

+0

這似乎是一個很好的JavaScript答案,但要小心;這無助於提問者(這可能是爲什麼它被低估)。請注意,他們用PHP標記了這個問題,所以他們正在尋找一種方法在PHP中實現這一點。 –

2

您可以使用此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()); 

Demo

編輯從路徑元素改爲不帶路徑元素,感謝@ splash58的擡起頭

+0

svg children not have path ='$ toDelete = $ x-> query(「// svg/* [not(.// path)]」);' – splash58

+0

廢話,我誤解了這個問題。編輯它,感謝@ splash58! – ishegg

+0

兒童 - svg'/*' – splash58