📜  PHP | DOMNode cloneNode()函数(1)

📅  最后修改于: 2023-12-03 15:18:22.406000             🧑  作者: Mango

PHP | DOMNode cloneNode()函数

cloneNode()函数是PHP DOM扩展中的一个函数,可以用于克隆一个节点。

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

cloneNode()函数接受一个可以选的布尔参数 $deep,用于指定是否克隆节点的子节点。当 $deep 参数为 true 时,克隆节点及其所有子节点;当 $deep 参数为 false 时,只克隆节点本身,不复制其任何子节点。函数返回克隆后的 DOMNode 对象。如果克隆失败,则返回 false

示例
<?php
$xml = <<<XML
<book>
    <title>PHP DOM节点克隆</title>
    <author>PHP大师</author>
    <publisher>PHP出版社</publisher>
    <year>2019</year>
</book>
XML;

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

// 克隆节点及其所有子节点(深克隆)
$book1 = $doc->getElementsByTagName('book')->item(0);
$book2 = $book1->cloneNode(true);
$doc->getElementsByTagName('library')->item(0)->appendChild($book2);

// 只克隆节点本身(浅克隆)
$title1 = $doc->getElementsByTagName('title')->item(0);
$title2 = $title1->cloneNode();
$title2->nodeValue = 'PHP DOM节点复制';
$book1->replaceChild($title2, $title1);

echo $doc->saveXML();
?>

上面的示例代码创建了一个包含一本书信息的 XML 文档。首先,使用 getElementsByTagName() 方法获取到文档中的 book 节点,并将其深度克隆到一个新的变量 $book2 中,然后将其添加到 library 节点中。接着,使用 getElementsByTagName() 方法获取到 title 节点,并将其浅度克隆到一个新的变量 $title2 中,修改其节点值后,将其替换为原来的 title 节点。最后,使用 saveXML() 方法输出修改后的 XML 文档。

输出结果如下:

<?xml version="1.0"?>
<library>
  <book>
    <title>PHP DOM节点复制</title>
    <author>PHP大师</author>
    <publisher>PHP出版社</publisher>
    <year>2019</year>
  </book>
  <book>
    <title>PHP DOM节点克隆</title>
    <author>PHP大师</author>
    <publisher>PHP出版社</publisher>
    <year>2019</year>
  </book>
</library>

可以看到,节点 title 的内容已经被成功修改,节点 book 也被成功克隆。