On Fri, May 02, 2008 at 06:06:41PM +0200, Stefan Behnel wrote: > Hi, > > I've just fixed a long-standing problem in lxml, now I'm wondering if it isn't > actually a problem in libxml2. The function xmlSetTreeDoc() in tree.c is > called to update the xmlDoc* pointers of each node in a subtree when it gets > appended to a new parent in a different document. The question is: should this > function also re-assign the "name" pointers of the nodes if both documents use > a dict and the dictionary of the target document is different from the > dictionary of the source tree? > > The decision is easy to take (compare the dict pointers of both documents) and > the code to re-assign the name is simple: call xmlDictLookup() and re-assign > the name of the node to the result. In addition, a call to > xmlDictOwns(old_dict, old_name) might be necessary to see if the old name must > be freed. > > Would this be considered worth changing? Or are there any reasons not to do > this? There obviously is a performance impact, but I consider it the correct > thing to do if both documents are meant to be independent afterwards.
yes there is a performance impact for doing so. Still this may make sense, though for applications which copy tree fragments around, it's best to use the XML_PARSE_NODICT parsing option and limit the contextual dependancies for nodes (limit, not remove, entities and namespace references come to mind). Daniel -- Red Hat Virtualization group http://redhat.com/virtualization/ Daniel Veillard | virtualization library http://libvirt.org/ [EMAIL PROTECTED] | libxml GNOME XML XSLT toolkit http://xmlsoft.org/ http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/ _______________________________________________ xml mailing list, project page http://xmlsoft.org/ xml@gnome.org http://mail.gnome.org/mailman/listinfo/xml