Замена PHP DOMDocument ребенок DOMElement со строкой HTML

Используя PHP я пытаюсь взять строку HTML, переданную от WYSIWYG-редактора и заменить дочерние элементы элемента в предварительно загруженном документе HTML с новым HTML.

До сих пор я загружаю документ, определяющий элемент, который я хочу изменить идентификатором, но процесс для преобразования HTML во что-то, что может быть помещено в DOMElement, ускользает от меня.

libxml_use_internal_errors(true);

$doc = new DOMDocument();
$doc->loadHTML($html);

$element = $doc->getElementById($item_id);
if(isset($element)){
    //Remove the old children from the element
    while($element->childNodes->length){
        $element->removeChild($element->firstChild);
    }

    //Need to build the new children from $html_string and append to $element
}
8
задан ThinkingStiff 17 February 2013 в 03:31
поделиться

2 ответа

Если строку HTML можно проанализировать как XML, вы можете сделать это (после очистки элемента от всех дочерних узлов):

$fragment = $doc->createDocumentFragment();
$fragment->appendXML($html_string);
$element->appendChild($fragment);

Если $ html_string не может быть проанализирован как XML, произойдет сбой. Если это так, вам придется использовать loadHTML (), который менее строг, но он добавит элементы вокруг фрагмента, которые вам придется удалить.

В отличие от PHP, Javascript имеет свойство innerHTML, которое позволяет сделать это очень легко. Мне нужно было что-то подобное для проекта, поэтому я расширил DOMElement PHP, включив в него доступ к внутреннему HTML в стиле Javascript.

С его помощью вы можете получить доступ к свойству innerHTML и изменить его так же, как в Javascript:

echo $element->innerHTML;
$elem->innerHTML = '<a href="http://example.org">example</a>';

Источник: http://www.keyvan.net/2012/11/php-domdocument-replace-domelement -child-with-html-string /

13
ответ дан 5 December 2019 в 11:24
поделиться

Вы можете использовать loadHTML () для фрагмента кода, а затем добавить полученные созданные узлы в исходное дерево DOM.

1
ответ дан 5 December 2019 в 11:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: