正确使用MSXML replaceChild

时间:2012-05-15 15:04:13

标签: xml msxml

我正在尝试将一个XML文档中的节点替换为另一个XML文档中的节点。我收到以下错误:

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 个答案:

答案 0 :(得分: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吗?