Quelle fonction utilisez-vous pour obtenir innerHTML d'un DOMNode donné dans l'implémentation PHP DOM? Quelqu'un peut-il donner une solution fiable?
Bien sûr, externalHTML fera également l'affaire.
Comparez cette variante mise à jour avec PHP Manual User Note # 89718 :
<?php
function DOMinnerHTML(DOMNode $element)
{
$innerHTML = "";
$children = $element->childNodes;
foreach ($children as $child)
{
$innerHTML .= $element->ownerDocument->saveHTML($child);
}
return $innerHTML;
}
?>
Exemple:
<?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
. On peut également vouloir remplacer letrim
par unltrim
(ou même le supprimer complètement) pour conserver un peu d'espace blanc comme les sauts de ligne.DOMElement
au lieu d'unDOMNode
comme je passais le retourDOMDocument::getElementById()
. Juste au cas où ça ferait trébucher quelqu'un d'autre.Voici une version dans un style de programmation fonctionnelle :
la source
Pour renvoyer le
html
d'un élément, vous pouvez utiliser C14N () :la source
Une version simplifiée de la réponse de Haim Evgi:
Exemple d'utilisation:
Il n'est pas nécessaire de définir
preserveWhiteSpace
ouformatOutput
.la source
En plus de la belle version de trincot avec
array_map
etimplode
mais cette fois avecarray_reduce
:Je ne comprends toujours pas pourquoi il n'y a pas de
reduce()
méthode qui accepte les tableaux et les itérateurs.la source
la source
Voici une autre approche basée sur ce commentaire de Drupella sur php.net, qui a bien fonctionné pour mon projet. Il définit le
innerHTML()
en créant un nouveauDOMDocument
, en important et en y ajoutant le nœud cible, au lieu d'itérer explicitement sur les nœuds enfants.InnerHTML
Définissons cette fonction d'assistance:
où nous pouvons inclure / exclure la balise cible externe via le deuxième argument d'entrée.
Exemple d'utilisation
Ici, nous extrayons le HTML interne d'une balise cible donnée par le "premier" attribut id:
Exemple en direct:
http://sandbox.onlinephpfunctions.com/code/2714ea116aad9957c3c437d46134a1688e9133b8
la source
Ancienne requête, mais il existe une méthode intégrée pour le faire. Passez simplement le nœud cible à
DomDocument->saveHtml()
.Exemple complet:
Production:
<p>ciao questa è una <b>prova</b>.</p>
la source