-

在本章中,我们将研究XML DOM对象中的替换节点操作。由于我们知道DOM中的所有内容都维护在称为节点的分层信息单元中,替换节点提供了更新这些指定节点或文本节点的另一种方法。

以下是替换节点的两种方法。

replaceChild()

replaceChild()方法用新节点替换指定的节点。

用法

insertData()具有以下语法:

Node replaceChild(Node newChild,Node oldChild)抛出DOMException
replaceChild Node newChild Node oldChild 抛出DOMException   

哪里:

以下示例(replacenode_example.htm)将XML文档(“ node.xml)解析为XML DOM对象,并使用新节点<Name>替换指定的节点<FirstName>。

<!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.documentElement;

	z=xmlDoc.getElementsByTagName("FirstName");
	document.write("<b>Content of FirstName element before replace operation</b><br>");
	for (i=0;i<z.length;i++)
	{
		document.write(z[i].childNodes[0].nodeValue);
		document.write("<br>");
	}
	//create a Employee element, FirstName element and a text node
	newNode = xmlDoc.createElement("Employee");
	newTitle = xmlDoc.createElement("Name");
	newText = xmlDoc.createTextNode("MS Dhoni");

	//add the text node to the title node,
	newTitle.appendChild(newText);
	//add the title node to the book node
	newNode.appendChild(newTitle);

	y = xmlDoc.getElementsByTagName("Employee")[0]
	//replace the first book node with the new node
	x.replaceChild(newNode,y);

	z = xmlDoc.getElementsByTagName("FirstName");
	document.write("<b>Content of FirstName element after replace operation</b><br>");
	for (i = 0;i<z.length;i++)
	{
		document.write(z[i].childNodes[0].nodeValue);
		document.write("<br>");
	}
	</script>
   </body>
</html>

执行

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

替换操作前的FirstName元素的内容
谭美
塔尼亚
泰山

替换操作后FirstName元素的内容
塔尼亚
泰山

replaceData()

replaceData()替换以指定字符string指定的16位单位偏移开始的字符。

用法

replaceData()具有以下语法:

 void replaceData(int offset,int count,java.lang.String arg)throws DOMException
空隙replaceData 的int 偏移INT 计数java的字符stringARG 抛出抛出:DOMException   

哪里

以下示例(replacedata_example.htm)将XML文档(“ node.xml)解析为XML DOM对象并替换。

<!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("ContactNo")[0].childNodes[0];
         document.write("<b>ContactNo before replace operation:</b> "+x.nodeValue);
         x.replaceData(1,5,"9999999");
         document.write("<br>");
         document.write("<b>ContactNo after replace operation:</b> "+x.nodeValue);

      </script>
   </body>
</html>

在上面的例子中:

执行

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

联系人不要更换操作:1234567890

更换后的联系方式:199999997890