Какую функцию вы используете для получения innerHTML данного DOMNode в реализации PHP DOM? Может кто подскажет надежное решение?
Конечно, подойдет и внешний HTML.
Сравните этот обновленный вариант с примечанием пользователя PHP № 89718 :
<?php
function DOMinnerHTML(DOMNode $element)
{
$innerHTML = "";
$children = $element->childNodes;
foreach ($children as $child)
{
$innerHTML .= $element->ownerDocument->saveHTML($child);
}
return $innerHTML;
}
?>
Пример:
<?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
. Кроме того, один может понадобиться заменитьtrim
сltrim
(или даже удалить его полностью) , чтобы сохранить бит пробельные как разрывы строк.DOMElement
вместо a,DOMNode
поскольку я передавал return fromDOMDocument::getElementById()
. На всякий случай это кого-то сбивает.Вот версия в стиле функционального программирования :
источник
Чтобы вернуть
html
элемент, вы можете использовать C14N () :источник
Упрощенная версия ответа Хаима Евги:
Пример использования:
Нет необходимости устанавливать
preserveWhiteSpace
илиformatOutput
.источник
В дополнение к красивой версии trincot с
array_map
и,implode
но на этот раз сarray_reduce
:Все еще не понимаю, почему нет
reduce()
метода, который одинаково принимает массивы и итераторы.источник
источник
Вот еще один подход, основанный на этом комментарии Drupella на php.net, который хорошо сработал для моего проекта. Он определяет
innerHTML()
, создавая новыйDOMDocument
, импортируя и добавляя к нему целевой узел, вместо явного перебора дочерних узлов.Внутренний HTML
Определим эту вспомогательную функцию:
где мы можем включить / исключить внешний целевой тег через второй входной аргумент.
Пример использования
Здесь мы извлекаем внутренний HTML-код для целевого тега, заданного атрибутом "first" id:
Живой пример:
http://sandbox.onlinephpfunctions.com/code/2714ea116aad9957c3c437d46134a1688e9133b8
источник
Старый запрос, но для этого есть встроенный метод. Просто передайте целевой узел в
DomDocument->saveHtml()
.Полный пример:
Вывод:
<p>ciao questa è una <b>prova</b>.</p>
источник