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.parseSt ring("<resp><do c><one>One</one><two>Two</two></doc></resp>")
_resp = minidom.parseSt ring("<resp><do c/></resp>")
Note that these are different documents - this is important later on.
iSourseTag = _requ.getElemen tsByTagName('do c')[0]
iTargetTag = _resp.getElemen tsByTagName('do c')[0]
# it prints me that there are two child nodes
for iChild in iSourseTag.chil dNodes:
print iChild.toxml()
Seems alright.
# when i walk elements, only first iteration was made
# and iSourseTag.chil dNodes now have only one element instead of two
for iChild in iSourseTag.chil dNodes:
iTargetTag.appe ndChild(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.chil dNodes:
# 1 or True should cause a deep copy
iNewChild = _resp.importNod e(iChild, 1)
iTargetTag.appe ndChild(iNewChi ld)
# it prints me that there is only one child node
for iChild in iSourseTag.chil dNodes:
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