📅  最后修改于: 2023-12-03 15:18:22.406000             🧑  作者: Mango
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
也被成功克隆。