xml-general mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jacob Kjome <h...@visi.com>
Subject Re: best approach to whole document cloning in Xerces2?
Date Mon, 17 Apr 2006 13:17:53 GMT
At 11:17 AM 4/16/2006, you wrote:
 >Hi Jake,
 >The behaviour of Document.cloneNode(true) [1] is implementation dependent.
 >In Xerces it will create a new Document and then import the children from
 >the original document.

Which would leave out the DTD, I suppose.  So, it would make more 
sense to create my own document and do something like this, right?...

             DOMImplementation domImpl = document.getImplementation();
             String documentElement = document.getDoctype().getName();
             DocumentType docType = 
document.getDoctype().getPublicId(), document.getDoctype().getSystemId());
             Document doc = domImpl.createDocument("", 
documentElement, docType);
             Node node = doc.importNode(document.getDocumentElement(), true);
             doc.replaceChild(node, doc.getDocumentElement());

This is what I do currently to get a copy of the template DOM at 
runtime, but I just want to make sure I'm doing it the most correct 
and efficient way possible.

Of course, this leaves out any internal subset and entity nodes, 
no?  How would I clone it all?  Is it possible via the DOM interfaces?

 > I would be really surprised if reparsing the
 >document performed better than an in-memory copy (unless you had a
 >UserDataHandler [2] registered which does some heavy operation in response
 >to the cloning/importing).

I kind of figured this, but I just wanted to make sure that the 
caching of template DOM's that I'm doing makes sense.


 >Michael Glavassevich
 >XML Parser Development
 >IBM Toronto Lab
 >E-mail: mrglavas@ca.ibm.com
 >E-mail: mrglavas@apache.org
 >Jacob Kjome <hoju@visi.com> wrote on 04/16/2006 02:17:10 AM:
 >> I'm wondering what's the best approach to cloning an entire
 >> document?  Would it be better to keep a master copy in memory and
 >> then create a new document and import the other document in there, or
 >> would it be better to simply reparse the document every time (where
 >> the document is used over and over again as a template, a copy is
 >> created and manipulated on each HTTP request, then serialized to the
 >> browser)?  If I keep the document in memory and know I am dealing
 >> with the Xerces2 implementation, can I just call cloneNode(true) and
 >> get an identical copy of the whole document, including doctype,
 >> entities, entity references, etc...?  Again, would this be more
 >> efficient than reparsing the document each time with, say, the
 >> Xerces2 DOMParser?  Is there a clear-cut answer to this, or does it
 >> depend on document size or other aspect of the document or environment?
 >> thanks,
 >> Jake
 >> ---------------------------------------------------------------------
 >> To unsubscribe, e-mail: general-unsubscribe@xml.apache.org
 >> For additional commands, e-mail: general-help@xml.apache.org
 >To unsubscribe, e-mail: general-unsubscribe@xml.apache.org
 >For additional commands, e-mail: general-help@xml.apache.org

To unsubscribe, e-mail: general-unsubscribe@xml.apache.org
For additional commands, e-mail: general-help@xml.apache.org

View raw message