-

这里我们将介绍关于XML DOM对象的克隆节点操作。克隆节点操作用于创建指定节点的副本。cloneNode()用于此操作。

cloneNode()

此方法返回此节点的副本,即,作为节点的通用拷贝构造函数。重复节点没有父(parentNode为null),没有用户数据。

用法

cloneNode()方法的语法如下:

节点cloneNode(布尔深)
 cloneNode(boolean deep)

以下示例(clonenode_example.htm)将XML文档(“ node.xml)解析为XML DOM对象,并创建第一个Employee元素的深层副本

<!DOCTYPE html>
<html>
   <head>
      <script>
         function loadXMLDoc(filename)
         {
            if (window.XMLHttpRequest)
            {
               xhttp = new XMLHttpRequest();
            }
            else // code for IE5 and IE6
            {
               xhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xhttp.open("GET",filename,false);
            xhttp.send();
            return xhttp.responseXML;
         }
      </script>
   </head>
   <body>
      <script>
         xmlDoc = loadXMLDoc("/dom/node.xml");

         x = xmlDoc.getElementsByTagName("Employee")[0];
         clone_node = x.cloneNode(true);
         xmlDoc.documentElement.appendChild(clone_node);

         firstname = xmlDoc.getElementsByTagName("FirstName");
         lastname = xmlDoc.getElementsByTagName("LastName");
	 contact = xmlDoc.getElementsByTagName("ContactNo");
	 email = xmlDoc.getElementsByTagName("Email");
         for (i = 0;i < firstname.length;i++)
         {
            document.write(firstname[i].childNodes[0].nodeValue+"  "+lastname[i].childNodes[0].nodeValue+",  "+contact[i].childNodes[0].nodeValue+",  "+email[i].childNodes[0].nodeValue);
            document.write("<br>");
         }
      </script>
   </body>
</html>

如上例所示,我们将cloneNode()参数设置为true因此,Employee元素下的每个子元素都被复制或克隆。

执行

将此文件作为clonenode_example.htm保存在服务器路径上(此文件和node.xml应与服务器中的路径相同)。在输出中,我们得到以下内容:

Tanmay Patil,1234567890,tanmaypatil@xyz.com
Taniya Mishra,1234667898,taniyamishra@xyz.com
Tanisha Sharma,1234562350,tanishasharma@xyz.com
Tanmay Patil,1234567890,tanmaypatil@xyz.com

您会注意到第一个Employee员工元素被完全克隆。