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 =
domImpl.createDocumentType(documentElement,
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.
Jake
>[1]
>http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#ID-3A0ED0A4
>[2]
>http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#User
>DataHandler
>
>Michael Glavassevich
>XML Parser Development
>IBM Toronto Lab
>E-mail: [EMAIL PROTECTED]
>E-mail: [EMAIL PROTECTED]
>
>Jacob Kjome <[EMAIL PROTECTED]> 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: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]