Obtendo conteúdo de um div (incluindo tags filho) com DOM

Estou usando o DOM para obter conteúdo da tag div, mas a parte html interna não é mostrada. A function é:

$dom = new DOMDocument; libxml_use_internal_errors(true); $dom->loadHTMLFile("$url"); libxml_use_internal_errors(false); $xpath = new DOMXPath($dom); $divTag = $xpath->query('//div[@id="post"]'); foreach ($divTag as $val) { echo $val->getAttribute('title') . ' - ' . $val->nodeValue . "
\n"; }

se a fonte da página for (apenas para Div)

 
Some text some codes

então a function retorna apenas

 "Some text " 

mas eu quero obter todos os elementos HTML também, assim:

 Some text  some codes

Há alguma forma de fazer isso? Obrigado agora.

Se você estiver procurando a versão DOMDocument do innerHTML no DOM do navegador, o mais próximo é saveXML .

 echo $dom->saveXML(val).'
\n';

(Lembre-se de htmspecialchars se quiser que realmente apareça como texto.)

Isso dá-lhe o outerHTML . Se você realmente precisa do innerHTML , você deve percorrer cada um dos nós filhos do elemento e passá-los para saveXML , em seguida, saveXML -los.

E é apenas serialização XML: não existe uma versão HTML correspondente. saveHTML existe, mas só pode salvar todo o documento ao mesmo tempo, infelizmente. Se importa que você obtenha o legado-HTML, você poderá sair com ele passando na opção LIBXML_NOEMPTYTAG para garantir que as marcas vazias irritantes como não quebram o navegador.

tente remover o ‘//’ do seu Xpath Query …

Isso diz ao analisador XPath, e também para obter todos os nós filhos … quais as suas tags HTML …

Referência: http://www.w3schools.com/XPath/xpath_syntax.asp

EDITAR:

Verifique também os eixos XPath: http://www.w3schools.com/xpath/xpath_axes.asp

Basicamente, o que Bobince disse, mas estou acrescentando que você pode usar o buffer de saída para obter o conteúdo se você fizer isso no php sem exibi-lo no html.

 $divTag = $xpath->query('//div[@id="post"]'); ob_start(); foreach ($divTag as $val) { echo $dom->saveXML($val); } $content = ob_get_clean();