Awesome, this is the kind of information I need. Most use cases for me and my users aren't this involved yet. But I definitely want to reach this level of sophistication. Just have to decide where it goes on the priority list. Thanks Daniel.
I need to write some more tests to make sure the behavior is consistent for the level it's at right now. I'll likely be back with more targeted questions. :Marco On Thu, Aug 5, 2010 at 8:35 AM, Daniel Veillard <[email protected]> wrote: > On Tue, Aug 03, 2010 at 11:10:24AM -0400, Marco Rogers wrote: > > I'm using manipulation functions like xmlAddChild and xmlAddNextSibiling > in > > my javascript binding library (http://github.com/polotek/libxmljs). I > > whenever I use these I have a function that checks whether the incoming > new > > node is already a child of a different document and if so it does a node > > copy and destroys the old node. I've now been told that this isn't > > necessary because functions like xmlAddChild already do this check and > will > > do the document transfer for me. Is this correct? What other things > should > > I take into account when transferring nodes across documents? > > It's more complex than that... > Basically a subtree is linked to the main document by multiple things: > > - the parent and doc pointers which are handled by xmlAddChild and > the like > - entity references will point to definitions in the DTD if used and > not replaced at parsing time > - the namespaces, that's far more complex, some element or attribute > in the subtree may references namespaces defined in upper layer > in the tree, that need to be carefully fixed, changing those > pointers to equivalent namespaces definitions in the target > xmlReconciliateNs() tries to handle this too. > - dictionary, some strings like Names or short text strings are > usually allocated from the document dictionnary at parse time > unless you deactivate them, so if the source and target documents do > not share the same dictionaries, this will lead to crash at the time > the tree is freed, either disable dictionary use at parse time > or make sure the documents share the same ditionnary > > in general, even if moving subtrees from one document to > another sounds simple this is actually a very complex operation to > do right in all cases. > > Daniel > > -- > Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ > [email protected] | Rpmfind RPM search engine http://rpmfind.net/ > http://veillard.com/ | virtualization library http://libvirt.org/ > -- Marco Rogers [email protected] Life is ten percent what happens to you and ninety percent how you respond to it. - Lou Holtz
_______________________________________________ xml mailing list, project page http://xmlsoft.org/ [email protected] http://mail.gnome.org/mailman/listinfo/xml
