2017-10-09 4 views

답변

-2

:

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

path 후손없이 모든 svg 요소를 얻을 것이다 :

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

+0

이를 위해 괜찮은 자바 스크립트 답변 인 것처럼 보이지만 조심해야합니다. 이것은 asker에게 도움이되지 않을 것입니다. 그들은 PHP로 질문에 태그를 붙 였으므로 PHP에서이를 수행 할 방법을 찾고 있습니다. –

2

당신이 XPath 식을 사용할 수 있습니다.

또한

//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

이 아닌 svg 아이들은 질문을 잘못 읽었습니다. 그것을 수정, @ splash58 머리를 주셔서 감사합니다! – ishegg

+0

children - svg'/*' – splash58