在 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);
我目前是在现有的 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);