¿Qué función usa para obtener innerHTML de un DOMNode dado en la implementación PHP DOM? ¿Alguien puede dar una solución confiable?
Por supuesto, el HTML externo también lo hará.
Compare esta variante actualizada con la nota de usuario del manual PHP # 89718 :
<?php
function DOMinnerHTML(DOMNode $element)
{
$innerHTML = "";
$children = $element->childNodes;
foreach ($children as $child)
{
$innerHTML .= $element->ownerDocument->saveHTML($child);
}
return $innerHTML;
}
?>
Ejemplo:
<?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
. También es posible que desee reemplazar eltrim
con unltrim
(o incluso eliminarlo por completo) para preservar un poco del espacio en blanco como saltos de línea.DOMElement
lugar de unDOMNode
como estaba pasando el retornoDOMDocument::getElementById()
. Por si acaso tropieza con alguien más.Aquí hay una versión en un estilo de programación funcional :
fuente
Para devolver el
html
de un elemento, puede usar C14N () :fuente
Una versión simplificada de la respuesta de Haim Evgi:
Uso de ejemplo:
No es necesario configurar
preserveWhiteSpace
oformatOutput
.fuente
Además de la bonita versión de trincot con
array_map
yimplode
pero esta vez conarray_reduce
:Todavía no entiendo por qué no hay un
reduce()
método que acepte matrices e iteradores por igual.fuente
fuente
Aquí hay otro enfoque basado en este comentario de Drupella en php.net, que funcionó bien para mi proyecto. Define el
innerHTML()
al crear un nuevoDOMDocument
, importar y agregarle el nodo de destino, en lugar de iterar explícitamente sobre los nodos secundarios.InnerHTML
Definamos esta función auxiliar:
donde podemos incluir / excluir la etiqueta de destino externa a través del segundo argumento de entrada.
Ejemplo de uso
Aquí extraemos el HTML interno para una etiqueta de destino dada por el atributo de identificación "primer":
Ejemplo en vivo:
http://sandbox.onlinephpfunctions.com/code/2714ea116aad9957c3c437d46134a1688e9133b8
fuente
Consulta antigua, pero hay un método integrado para hacerlo. Simplemente pase el nodo de destino a
DomDocument->saveHtml()
.Ejemplo completo:
Salida:
<p>ciao questa è una <b>prova</b>.</p>
fuente