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

Reply via email to