Hi guys,
I'm looking for some feedback on the correct way to fix a bug with importNode() and adoptNode(). Let me explain the bug first.
I want to copy or move some elemets from one document (docA) into another (docB). The elements in question have an IDREF attribute set on them, and using Document.getElementbyId() on docA works as expected. However after importing the elements into docB using either importNode() or adoptNode(), calling getElementbyId() on DocB fails to return the imported/adopted elements.
The importNode() method copies attributes by constructing new instances of the attribute node with Document.createAttribiute[NS](). Hence the NodeImpl.ID flag on the attribute is not preserved and so when importNode() calls setNodeValue() to set the copied attribute's value, AttrImpl.setNodeValue() does not end up calling putIdentifier() on it's ownerDocument as it should.
Would a correct fix for this be to copy NodeImpl.flags across to the new attribute when the source attribute is also an instance of NodeImpl? Or perhaps examine isIdAttribute() on the original and set it accordingly on the copy?
The adoptNode() method does preserve the NodeImpl.ID flag, but does not do anything to cause the identifier to be removed from the old owner document and be added to the new owner document.
A potential fix for this would be in AttrImpl.setOwnerDocument(), when the NodeImpl.ID flag is set, to call removeIdentifier() on the existing owner document, if any, and to call putIdentifier() on the new owner document, if any.
Thanks for your comments!
Mike.
-- Mike Gratton <jabber:[EMAIL PROTECTED]> <http://web.vee.net/>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
