English | 简体中文 | 繁體中文
查询

DOMNode::cloneNode()函数—用法及示例

「 克隆节点 」


方法: DOMNode::cloneNode()

概述: cloneNode() 方法用于克隆节点。它创建并返回当前节点的一个副本,包括其所有的属性以及子节点。

语法: DOMNode::cloneNode(bool $deep = true): DOMNode|false

参数:

  • $deep (可选): 指定是否克隆节点的所有子节点。默认值为 true,表示克隆整个子树。如果设置为 false,则只克隆当前节点。

返回值:

  • 成功时返回 DOMNode 对象,表示克隆的节点。
  • 如果克隆节点失败,则返回 false

示例:

$xml = '<?xml version="1.0" encoding="UTF-8"?>
<root>
    <item id="1">Apple</item>
    <item id="2">Banana</item>
</root>';

$dom = new DOMDocument();
$dom->loadXML($xml);

$items = $dom->getElementsByTagName('item');

foreach ($items as $item) {
    $cloneNode = $item->cloneNode();
    $cloneNode->setAttribute('id', 'new_' . $item->getAttribute('id'));
    $cloneNode->nodeValue = 'New ' . $item->nodeValue;

    $dom->documentElement->appendChild($cloneNode);
}

echo $dom->saveXML();

解释: 以上示例中,我们使用 cloneNode() 方法克隆了 <item> 节点并向其添加了一个新的标识符以及修改了节点值。然后,我们将克隆的节点添加到 <root> 元素中。

输出结果:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <item id="1">Apple</item>
    <item id="2">Banana</item>
    <item id="new_1">New Apple</item>
    <item id="new_2">New Banana</item>
</root>

注意事项:

  • 克隆节点后,它并不会自动添加到原始文档中。必须通过 appendChild() 或类似的方式将其添加到适当的位置。
  • 克隆节点是深度克隆的,默认情况下会包括所有子节点。如果只想克隆当前节点而不复制其子节点,可以将 $deep 参数设置为 false
  • 克隆节点时,会复制节点的属性以及子节点。任何事件监听器、数据存储或其他附加数据都不会被克隆。
补充纠错
上一个函数: DOMNode::contains()函数
下一个函数: DOMNode::getLineNo()函数
热门PHP函数
分享链接