Qual função você usa para obter o innerHTML de um determinado DOMNode na implementação do DOM do PHP? Alguém pode dar uma solução confiável?
É claro que outerHTML também serve.
Compare esta variante atualizada com a Nota do Usuário do Manual do PHP # 89718 :
<?php
function DOMinnerHTML(DOMNode $element)
{
$innerHTML = "";
$children = $element->childNodes;
foreach ($children as $child)
{
$innerHTML .= $element->ownerDocument->saveHTML($child);
}
return $innerHTML;
}
?>
Exemplo:
<?php
$dom= new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->load($html_string);
$domTables = $dom->getElementsByTagName("table");
// Iterate over DOMNodeList (Implements Traversable)
foreach ($domTables as $table)
{
echo DOMinnerHTML($table);
}
?>
DOMDocument
. Também pode ser necessário substituir otrim
por umltrim
(ou até mesmo removê-lo completamente) para preservar um pouco dos espaços em branco, como quebras de linha.DOMElement
vez de um,DOMNode
pois estava passando o retorno deDOMDocument::getElementById()
. Apenas no caso de tropeçar em alguém.Aqui está uma versão em um estilo de programação funcional :
fonte
Para retornar o
html
de um elemento, você pode usar C14N () :fonte
Uma versão simplificada da resposta de Haim Evgi:
Exemplo de uso:
Não há necessidade de definir
preserveWhiteSpace
ouformatOutput
.fonte
Além da bela versão do trincot com
array_map
e,implode
mas desta vez comarray_reduce
:Ainda não entendi porque não existe um
reduce()
método que aceite arrays e iteradores.fonte
fonte
Aqui está outra abordagem baseada neste comentário de Drupella no php.net, que funcionou bem para o meu projeto. Ele define o
innerHTML()
criando um novoDOMDocument
, importando e anexando a ele o nó de destino, em vez de iterar explicitamente sobre os nós filhos.InnerHTML
Vamos definir esta função auxiliar:
onde podemos incluir / excluir a tag de destino externa por meio do segundo argumento de entrada.
Exemplo de uso
Aqui, extraímos o HTML interno para uma tag de destino fornecida pelo atributo de id "primeiro":
Exemplo ao vivo:
http://sandbox.onlinephpfunctions.com/code/2714ea116aad9957c3c437d46134a1688e9133b8
fonte
Consulta antiga, mas existe um método integrado para fazer isso. Basta passar o nó de destino para
DomDocument->saveHtml()
.Exemplo completo:
Resultado:
<p>ciao questa è una <b>prova</b>.</p>
fonte