Maksim Kasimov wrote: > Hi, i'm faced with such a problem when i use xml.dom.minidom: > > to append all child nodes from "doc" in "_requ" to "doc" in "_resp", i do the > following: > > _requ = > minidom.parseString("<resp><doc><one>One</one><two>Two</two></doc></resp>") > _resp = minidom.parseString("<resp><doc/></resp>")
Note that these are different documents - this is important later on. > iSourseTag = _requ.getElementsByTagName('doc')[0] > iTargetTag = _resp.getElementsByTagName('doc')[0] > > > # it prints me that there are two child nodes > for iChild in iSourseTag.childNodes: > print iChild.toxml() Seems alright. > # when i walk elements, only first iteration was made > # and iSourseTag.childNodes now have only one element instead of two > for iChild in iSourseTag.childNodes: > iTargetTag.appendChild(iChild) But since you're taking a node from one document to add it to another, you should instead use importNode to make that node importable into the target document: for iChild in iSourseTag.childNodes: # 1 or True should cause a deep copy iNewChild = _resp.importNode(iChild, 1) iTargetTag.appendChild(iNewChild) > # it prints me that there is only one child node > for iChild in iSourseTag.childNodes: > print iChild.toxml() That's probably because you've "stolen" the node from its document in order to add it to the target document - something which is possibly an artifact of the minidom implementation. > i'm not sure, whether i append child nodes in properly way, but IMHO it looks > like a bug. That minidom does not refuse to let you "move" nodes in this way could be debated as being a bug or not, but the correct way of copying nodes is to use importNode. > My question is how to avoid the "iSourseTag" changes while iterate its nodes? > > And, of course, how to append all child nodes to "iTargetTag"? These questions are hopefully answered above. Paul -- http://mail.python.org/mailman/listinfo/python-list