2017-10-09 7 views

答えて

-2

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

+0

これをJavaScriptの解答はきれいですが、注意してください。これは尋問者を助けることはありません(これはおそらくそれがダウン投票された理由です)。彼らはPHPで質問にタグ付けしているので、PHPでこれを達成する方法を探しています。 –

2

あなたはこのXPath式を使用することができます

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

path子孫なく、すべてのsvgの要素を取得します。

また

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

pathではないsvg要素の唯一の実際の子供を取得するために使用することができます。その後

、ちょうど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

パス= '$ toDelete = $ x-> query(" // svg/* [not(.// path)] ");' – splash58

+0

の子どもたちは、疑問を誤読しました。 @ splash58の頭のおかげでそれを編集しました! – ishegg

+0

子供たち - svg'/* ' – splash58

関連する問題