2012-05-15 33 views
0

我试图用另一个XML文档中的节点替换一个XML文档中的节点。我收到以下错误:正确使用MSXML replaceChild

Insert position node must be a Child of the node to insert under. 

这是我的XML的简化版本: XMLDOC1

<pages> 
    <page id="1"> 
    <content>First Document</content> 
    </page> 
</pages> 

其它XML文档在结构上完全一样: XMLDOC2

<pages> 
    <page id="1"> 
    <content>Second Document</content> 
    </page> 
</pages> 

我需要用第二个文档的页面节点替换第一个文档的页面节点。我的尝试如下所示:

firstNode = xmlDoc1.selectSingleNode("//page[@id=1]") 
secondNode = xmlDoc2.selectSingleNode("//page[@id=1]") 
xmlDoc1.replaceChild(firstNode, oldNode) 

谢谢。

firstNode.parentNode.replaceChild(xmlDoc1.importNode(secondNode, true), firstNode) 

回答

1

replaceChild的语法是:

var objXMLDOMNode = oXMLDOMNode.replaceChild(newChild, oldChild); 
  • newChild - 一个对象。要替换旧孩子的新孩子的地址。如果为null,则oldChild将被删除而不进行替换。
  • oldChild - 一个对象。旧孩子的地址将由新孩子替换。

它看起来像你必须扭转你的论点。并且运行replaceChild()的节点应该是您要替换的节点的父节点。您不应该在document上运行它。最后,由于您使用不同文档中的节点进行替换,因此您应该首先使用xmlDoc1.importNode(secondNode, true)导入。在新环境中使用它之前,您还可以考虑使用cloning节点cloneNode(deep)(以便您拥有自己的副本)。

p.s.你的代码片段中不应该是secondNode而不是oldNode

+0

是的,有一个错字。我更新了我的代码,并且完美地工作(请参阅更新后的问题)。感谢您澄清importNode位;我注意到其他地方,但不知道为什么。 – scader