2012-05-15 3 views
0

한 XML 문서의 노드를 다른 XML 문서의 노드로 바꾸려고합니다. XMLDOC2MSXML의 올바른 사용 replaceChild

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

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

다른 XML 문서 구조에서 동일한입니다 :

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

이 내 XML의 단순화 된 버전입니다 : 나는 다음과 같은 오류를 받고 있어요

첫 번째 문서의 페이지 노드를 두 번째 문서의 페이지 노드로 바꿔야합니다. 내 시도는 다음과 같습니다.

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)으로 가져와야합니다. 새로운 문맥에서 사용하기 전에 cloneNode(deep) 노드로 cloning을 고려할 수도 있습니다 (자신 만의 복사본을 가지고 있기 때문에).

p.s. secondNode이 아니고 코드 스 니펫에 oldNode이 없어야합니다.

+0

예, 오타가있었습니다. 내 코드를 업데이트했고 완벽하게 작동합니다 (업데이트 된 질문 참조). importNode 비트에 대해 설명해 주셔서 감사합니다. 나는 다른 곳에서 그걸 알아 차 렸지만 그 이유는 확실하지 않았습니다. – scader