在 Libxml 中包装标签

Wrap tag in 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;

问题是 $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);

Try it online!