Jacob Kjome <[EMAIL PROTECTED]> wrote on 04/17/2006 09:17:53 AM:
> 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.
I believe it does copy DocumentType nodes, though there's no guarantee
that other DOM implementations will do that.
> 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?
Right.
> How would I clone it all?
The implementation of Xerces' Document.cloneNode() should be able to do
that.
> Is it possible via the DOM interfaces?
You cannot import DocumentType nodes using the DOM API (
http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#Core-Document-importNode).
> > 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]
Michael Glavassevich
XML Parser Development
IBM Toronto Lab
E-mail: [EMAIL PROTECTED]
E-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]