我正在尝试将一个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)
答案 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
吗?