echo innerHTML, sem tags de nó externo

Estou usando a class DOMDocument para analisar uma série de marcação bastante imprevisível. Não é tudo bem formado e preciso de alguns dados. Regex está certo, é claro.
Até agora, eu tenho isso:

 $dom = new DOMDocument; $dom->loadHTML($str); $contents = $dom->getElementsByTagName('body')->item(0); echo $dom->saveXML($contents); 

Agora isso me dá:

  

What I'm really after

  • Foo
  • Bar
And so on

O que realmente me irrita são as tags . Eu quero que eles tenham ido embora. Depois de pastar a web, encontrei as soluções alternativas mais estranhas. Alguns mais hackeis do que outros, então, no final, eu me estabeleci:

 echo substr($dom->saveXML($contents), 6, -7); 

Ainda me parece hackeado, mas é o melhor que pude encontrar. Existe uma maneira mais confiável de obter o innerHTML do DOM, a partir de um determinado nó, sem as tags correspondentes realmente aparecendo?

Eu vi sugestões usando regex’s (um não-não IMHO), ou mesmo fazendo um loop para todas as crianças, ecoando aqueles que têm Nodos da criança, e encadear aqueles que não:

 if ($contents->hasChildNodes()) { $children = $contents->getElementsByTagName('*'); foreach($children as $child) { if ($child->hasChildNodes() || $child->nodeName === 'br') {//or isset($standaloneNodes[$child->nodeName]) echo $dom->saveXML($child); continue; } echo 'nodeName.'>'.$child->nodeValue.'nodeName.'>'; } } 

Mas isso, para mim, parece ainda mais absurdo …