Jakiej funkcji używasz do uzyskania innerHTML danego DOMNode w implementacji PHP DOM? Czy ktoś może podać niezawodne rozwiązanie?
Oczywiście zewnętrznyHTML też się nada.
Porównaj ten zaktualizowany wariant z uwagą użytkownika instrukcji obsługi PHP nr 89718 :
<?php
function DOMinnerHTML(DOMNode $element)
{
$innerHTML = "";
$children = $element->childNodes;
foreach ($children as $child)
{
$innerHTML .= $element->ownerDocument->saveHTML($child);
}
return $innerHTML;
}
?>
Przykład:
<?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
. Również może chcieć zastąpićtrim
ze związkiemltrim
(lub nawet usunąć go całkowicie), aby zachować trochę białe znaki jak łamanie wierszy.DOMElement
zamiast a,DOMNode
ponieważ przekazywałem zwrot zDOMDocument::getElementById()
. Na wypadek, gdyby ktoś podniósł się o coś.Oto wersja w funkcjonalnym stylu programowania :
źródło
Aby zwrócić
html
element, możesz użyć C14N () :źródło
Uproszczona wersja odpowiedzi Haima Evgi:
Przykładowe użycie:
Nie ma potrzeby ustawiania
preserveWhiteSpace
aniformatOutput
.źródło
Oprócz ładnej wersji Trincota z
array_map
i,implode
ale tym razem zarray_reduce
:Nadal nie rozumiem, dlaczego nie ma
reduce()
metody, która akceptuje zarówno tablice, jak i iteratory.źródło
źródło
Oto inne podejście oparte na komentarzu Drupelli na php.net, które dobrze się sprawdziło w moim projekcie. Definiuje on
innerHTML()
, tworząc nowyDOMDocument
, importując i dołączając do niego węzeł docelowy, zamiast jawnie iterować po węzłach potomnych.InnerHTML
Zdefiniujmy tę funkcję pomocniczą:
gdzie możemy dołączyć / wykluczyć zewnętrzny znacznik docelowy poprzez drugi argument wejściowy.
Przykład użycia
Tutaj wyodrębniamy wewnętrzny kod HTML dla znacznika docelowego podanego przez „pierwszy” atrybut id:
Przykład na żywo:
http://sandbox.onlinephpfunctions.com/code/2714ea116aad9957c3c437d46134a1688e9133b8
źródło
Stara kwerenda, ale jest do tego wbudowana metoda. Po prostu przekaż węzeł docelowy do
DomDocument->saveHtml()
.Pełny przykład:
Wynik:
<p>ciao questa è una <b>prova</b>.</p>
źródło