PHP Dom Remover elemento deixar conteúdo

Estou tentando remover determinados links dependendo de sua identificação, mas deixe o conteúdo do link. Por exemplo, quero virar

Some text goes here 

para

 Some text goes here 

Tentei usar o abaixo.

 $dom = new DOMDocument; $dom->loadHtml(mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8")); $xp = new DOMXPath($dom); foreach($xp->query('//a[contains(@id="remove")]') as $oldNode) { $revised = strip_tags($oldNode); } $revised = mb_substr($dom->saveXML($xp->query('//body')->item(0)), 6, -7, "UTF-8"); echo $revised; 

Aproximadamente tirado daqui, mas apenas cuspiu o mesmo conteúdo de $html .

Alguma idéia sobre como eu conseguiria isso?

Essa é a minha function para isso:

 function DOMRemove(DOMNode $from) { $sibling = $from->firstChild; do { $next = $sibling->nextSibling; $from->parentNode->insertBefore($sibling, $from); } while ($sibling = $next); $from->parentNode->removeChild($from); } 

Então, é isso:

 $dom->loadHTML('Hello World'); $a = $dom->getElementsByTagName('a')->item(0); // get first DOMRemove($a); 

Deve dar-lhe:

 Hello World 

Para obter nós com uma identificação específica, use XPath:

 $xpath = new DOMXpath($dom); $node = $xpath->query('//a[@id="something"]')->item(0); // get first DOMRemove($node); 

Uma abordagem semelhante à resposta do @ netcoder, mas usando uma estrutura de loop diferente e os methods DOMElement.

 $html = 'This link was removed.'; $dom = new DOMDocument(); $dom->loadHTML($html); $xpath = new DOMXPath($dom); foreach ($xpath->query('//a[@id="remove"]') as $link) { // Move all link tag content to its parent node just before it. while($link->hasChildNodes()) { $child = $link->removeChild($link->firstChild); $link->parentNode->insertBefore($child, $link); } // Remove the link tag. $link->parentNode->removeChild($link); } $html = $dom->saveXML(); 

Use :

  //a[@id='remove']/node() | //*[a[@id='remove']]/node()[not(self::a[@id=''remove])] 

Isso seleciona todas as crianças de qualquer a tenha o id atributo com o valor "remove" e todos os irmãos anteriores e seguintes deste que não são eles próprios a outro que tenha o id atributo com o valor de "remove"