2017-10-09 5 views

Répondre

-2

En Jquery:

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

+0

Cette semble être une bonne réponse JavaScript, mais faites attention; cela n'aidera pas le demandeur (qui est probablement pourquoi il a été downvoted). Notez qu'ils ont étiqueté la question avec PHP, donc ils cherchent un moyen d'accomplir cela en PHP. –

2

Vous pouvez utiliser cette expression XPath:

//svg[not(.//path)] 

qui obtenir tous svg éléments sans un descendant path.

Vous pouvez également utiliser

//svg/*[not(.//path)] 

pour obtenir seulement les enfants réels de svg éléments qui ne sont pas path.

Ensuite, il suffit de supprimer tous les matchs du 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

modifier changé de avec l'élément de chemin vers sans élément de chemin, merci @ splash58 pour le heads up

+0

svg enfants qui n'ont pas de chemin = '$ toDelete = $ x-> query (" // svg/* [not (.// path)] ");' – splash58

+0

Merde, j'ai mal lu la question. Edité, merci pour les heads up @ splash58! – ishegg

+0

enfants - svg'/* ' – splash58