Intereting Posts
Как включить заголовок авторизации в HTTP-запросе cURL POST в PHP? Изменение navbar в bootstrap, если вход в систему Куки-файлы против сеансов Найти, если установленный PHP является потокобезопасным или небезопасным? как TCPDF предотвращает дополнительную пустую страницу как объединить json закодированные массивы, возвращенные из parallelcurl в PHP Сделать несколько страниц из запроса mysql Миграции Laravel – префикс таблицы Учитывая массив массивов, как я могу заменить все пустые значения на 0? PHP удаляет «ссылку» из переменной. Нежелательная новая строка, возвращенная после запроса AJAX Отправка электронной почты от PHPMailer с использованием IP-адресов прокси Как найти php-файл или функцию, которая создает страницу администратора WordPress? Кодирование / декодирование URL-адресов PHP Получите широту и долготу всего местоположения, которые находятся в радиусе 10 км от моего текущего местоположения с помощью карты google (с использованием PHP)

PHP – DOMDocument – нужно изменить / заменить существующий тег HTML w / new

Я пытаюсь изменить все теги <P> в документе на <DIV> . Это то, что я придумал, но он, похоже, не работает:

 $dom = new DOMDocument; $dom->loadHTML($htmlfile_data); foreach( $dom->getElementsByTagName("p") as $pnode ) { $divnode->createElement("div"); $divnode->nodeValue = $pnode->nodeValue; $pnode->appendChild($divnode); $pnode->parentNode->removeChild($pnode); } 

Это результат, который я хочу:

До:

 <p>Some text here</p> 

После:

 <div>Some text here</div> 

Вы добавляете div к вашему p что приводит к <p><div></div></p> , удаление p удалит все.
Кроме того, $divnode->createElement() не будет работать, если $divnode не инициализирован.

Попробуйте вместо этого использовать DOMDocument :: replaceChild () (позиция div s в dom будет такой же, как и p s).

 foreach( $dom->getElementsByTagName("p") as $pnode ) { $divnode = $dom->createElement("div", $pnode->nodeValue); $dom->replaceChild($divnode, $pnode); } 

Усовершенствованная функция из этого ответа

 function changeTagName( $node, $name ) { $childnodes = array(); foreach ( $node->childNodes as $child ) { $childnodes[] = $child; } $newnode = $node->ownerDocument->createElement( $name ); foreach ( $childnodes as $child ){ $child2 = $node->ownerDocument->importNode( $child, true ); $newnode->appendChild($child2); } if ( $node->hasAttributes() ) { foreach ( $node->attributes as $attr ) { $attrName = $attr->nodeName; $attrValue = $attr->nodeValue; $newnode->setAttribute($attrName, $attrValue); } } $node->parentNode->replaceChild( $newnode, $node ); return $newnode; }