Обернуть тег в Libxml


В настоящее время я строю поверх существующего кода libxml и не смог найти подробную документацию.

Можно ли обернуть тег вокруг узла?

Я думал, что это сработает:

$tags = $doc->getElementsByTagName( 'pre' );

foreach( $tags as $tag ):

    $handler = $doc->createElement( 'div' );
    $handler->setAttribute( 'class', 'pre_wrapper' );
    $newnode = $handler->appendChild( $tag );

    $tag->replaceNode( $newnode );

endforeach;
Author: Johannes Grandy, 2018-10-04

1 answers

Проблема в том, что $handler->appendChild($tag) отсоединяет элемент $tag от его исходного местоположения, поэтому следующий replaceNode не дает желаемого эффекта. Это означает, что вам придется поменять порядок звонков. Кроме того, я не смог найти метод replaceNode, но есть replaceChild, который должен быть вызван на родительском узле:

# Create wrapper element
$handler = $doc->createElement('div');
$handler->setAttribute('class', 'pre_wrapper');
# Replace wrapped element with wrapper
$tag->parentNode->replaceChild($handler, $tag);
# Move wrapped element into wrapper
$handler->appendChild($tag);

Попробуйте это онлайн!

 1
Author: nwellnhof, 2018-10-05 13:14:47