You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by sk...@dcsimtech.com on 2001/05/14 06:03:22 UTC

org.w3c.dom.document.importNode() (was:Re: Problem with XMLFragment)

Hello Everybody,

o.k. I have tied to work with that nice importNode.

My function looks like this:

public static void insertEntityOld(Document myDocument, String
fileToInclude, String tag) throws Exception
     {
          Node tagToInsertNode =
myDocument.getElementsByTagName(tag).item(0);
          Node hereToInsertNode = tagToInsertNode.getParentNode();
          deleteElement(tagToInsertNode);
          Document EntityDocument = parseDocument(fileToInclude);
          Node NodeToInsert
=EntityDocument.getElementsByTagName(tag).item(0);
          Node resultNode = myDocument.importNode(NodeToInsert,true);
     }

But what happens is that the old Node is deleated, but the new one is not
imported. I parse the right document an get the right node, or let me say,
various println make me think so. There is no Error occureing, no exception
thrown, nothing.

If somebody has an idea or similar experience, please contact me.

Sascha

PS: It would be very nice if you could put my e-mail-adress in cc, in the
archives there are allways more postings than I get.....





"Piroumian, Konstantin" <KP...@flagship.ru> on 04/25/2001 03:05:13 PM

Please respond to cocoon-users@xml.apache.org

To:   cocoon-users@xml.apache.org
cc:    (bcc: sascha kolski/Dcsimtech)
Subject:  Re: Problem with XMLFragment




It is in the org.w3c.dom.Document interface.

  Node <file:///D:/Java/xerces-1_1_2/docs/apiDocs/org/w3c/dom/Node.html>
importNode
<file:///D:/Java/xerces-1_1_2/docs/apiDocs/org/w3c/dom/Document.html#imp
ortNode(org.w3c.dom.Node, boolean)> ( Node
<file:///D:/Java/xerces-1_1_2/docs/apiDocs/org/w3c/dom/Node.html>
importedNode, boolean deep)
          Imports a node from another document to this document.


importNode

public  Node
<file:///D:/Java/xerces-1_1_2/docs/apiDocs/org/w3c/dom/Node.html>
importNode( Node
<file:///D:/Java/xerces-1_1_2/docs/apiDocs/org/w3c/dom/Node.html>
importedNode,

                       boolean deep)

                throws  DOMException
<file:///D:/Java/xerces-1_1_2/docs/apiDocs/org/w3c/dom/DOMException.html
>

Imports a node from another document to this document. The returned node
has no parent; (parentNode is null ). The source node is not altered or
removed from the original document; this method creates a new copy of
the source node.
For all nodes, importing a node creates a node object owned by the
importing document, with attribute values identical to the source node's
nodeName and nodeType , plus the attributes related to namespaces
(prefix , localName , and namespaceURI ). As in the cloneNode operation
on a Node , the source node is not altered.
Additional information is copied as appropriate to the nodeType ,
attempting to mirror the behavior expected if a fragment of XML or HTML
source was copied from one document to another, recognizing that the two
documents may have different DTDs in the XML case. The following list
describes the specifics for every type of node.


ELEMENT_NODE

Specified attribute nodes of the source element are imported, and the
generated Attr nodes are attached to the generated Element . Default
attributes are not copied, though if the document being imported into
defines default attributes for this element name, those are assigned. If
the importNode deep parameter was set to true , the descendants of the
source element will be recursively imported and the resulting nodes
reassembled to form the corresponding subtree.

ATTRIBUTE_NODE

The specified flag is set to true on the generated Attr . The
descendants of the source Attr are recursively imported and the
resulting nodes reassembled to form the corresponding subtree. Note that
the deep parameter does not apply to Attr nodes; they always carry their
children with them when imported.

TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE

These three types of nodes inheriting from CharacterData copy their data
and length attributes from those of the source node.

ENTITY_REFERENCE_NODE

Only the EntityReference itself is copied, even if a deep import is
requested, since the source and destination documents might have defined
the entity differently. If the document being imported into provides a
definition for this entity name, its value is assigned.

ENTITY_NODE

Entity nodes can be imported, however in the current release of the DOM
the DocumentType is readonly. Ability to add these imported nodes to a
DocumentType will be considered for addition to a future release of the
DOM. On import, the publicId , systemId , and notationName attributes
are copied. If a deep import is requested, the descendants of the the
source Entity is recursively imported and the resulting nodes
reassembled to form the corresponding subtree.

PROCESSING_INSTRUCTION_NODE

The imported node copies its target and data values from those of the
source node.

DOCUMENT_NODE

Document nodes cannot be imported.

DOCUMENT_TYPE_NODE

DocumentType nodes cannot be imported.

DOCUMENT_FRAGMENT_NODE

If the deep option was set true , the descendants of the source element
will be recursively imported and the resulting nodes reassembled to form
the corresponding subtree. Otherwise, this simply generates an empty
DocumentFragment .

NOTATION_NODE

Notation nodes can be imported, however in the current release of the
DOM the DocumentType is readonly. Ability to add these imported nodes to
a DocumentType will be considered for addition to a future release of
the DOM. On import, the publicId and systemId attributes are copied.
Note that the deep parameter does not apply to Notation nodes since they
never have any children.







Parameters:

importedNode - The node to import.

deep - If true , recursively import the subtree under the specified
node; if false , import only the node itself, as explained above. This
does not apply to Attr , EntityReference , and Notation nodes.

Returns:

The imported node that belongs to this Document .

Throws:

DOMException
<file:///D:/Java/xerces-1_1_2/docs/apiDocs/org/w3c/dom/DOMException.html
>  - NOT_SUPPORTED_ERR: Raised if the type of node being imported is not
supported.

Since:

DOM Level 2

----- Original Message -----
Fr
From: Manuel Alzola <ma...@wanadoo.es>
To: cocoon-users@xml.apache.org <ma...@xml.apache.org>
Sent: Wednesday, April 25, 2001 7:00 AM
Subject: Re: Problem with XMLFragment

    I?ve looked for importNode() in Document, DocumentBuilder, Element,
Node with no result. Could you tell me where it is?
    Thanks
    Manuel

----- Original Message -----
Fr
From: Piroumian, Konstantin <ma...@flagship.ru>
To: cocoon-users@xml.apache.org <ma...@xml.apache.org>
Sent: Monday, April 23, 2001 9:14 AM
Subject: Re: Problem with XMLFragment

Or use importNode() instead.

Kot.

hi
to append two document/nodes in cocoon both must have the same parent
document. Thus you cannot append a document into another document using
appendChild.

Try making the servlet return the xml document as child of the document
in which you are trying to add it to (ie node in your case).

anupam


----- Original Message -----
Fr
From: Manuel  <ma...@wanadoo.es> Alzola
To: cocoon-users@xml.apache.org <ma...@xml.apache.org>
Sent: Sunday, April 22, 2001 12:39 PM
Subject: Problem with XMLFragment

Hello. I?m using XMLFragment to provide dynamic xml. The data comes from
a servlet that outputs xml. It parses ok with Xerces. Then I concatenate
the two docs this way

public void toDOM(Node node)
{
    ...
    node.appendChild(subdocument.getDocumentElement());
}

I get the following error

java.lang.RuntimeException: Error building DOM:
org.apache.xerces.dom.DOMExceptionImpl: DOM005 Wrong document

     at
org.apache.cocoon.processor.xsp.XSPPage.xspExpr(XSPPage.java:183)

     at
_D_._TOOLS._Java._Servers._tomcat._webapps._puro_feeling._xsp._restauran
ts_report.populateDocument(_restaurants_report.java:101)

     at
org.apache.cocoon.processor.xsp.XSPPage.getDocument(XSPPage.java:97)

     at
org.apache.cocoon.processor.xsp.XSPProcessor.process(XSPProcessor.java:5
27)

     at org.apache.cocoon.Engine.handle(Engine.java:384)

     at org.apache.cocoon.Cocoon.service(Cocoon.java:183)

     at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

     at
org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)

     at org.apache.tomcat.core.Handler.service(Handler.java:286)

     at
org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)

     at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.jav
a:797)

     at
org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)

     at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(H
ttpConnectionHandler.java:210)

     at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416
)

     at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:49
8)

     at java.lang.Thread.run(Thread.java:484)
Whats wrong?
Thanks in advance
Manuel Alzola




Re: org.w3c.dom.document.importNode() (was:Re: Problem withXMLFragment)

Posted by Sylvain Wallez <sy...@anyware-tech.com>.

skolski@dcsimtech.com a écrit :
> 
> Hello Everybody,
> 
> o.k. I have tied to work with that nice importNode.
> 
> My function looks like this:
> 
> public static void insertEntityOld(Document myDocument, String
> fileToInclude, String tag) throws Exception
>      {
>           Node tagToInsertNode =
> myDocument.getElementsByTagName(tag).item(0);
>           Node hereToInsertNode = tagToInsertNode.getParentNode();
>           deleteElement(tagToInsertNode);
>           Document EntityDocument = parseDocument(fileToInclude);
>           Node NodeToInsert
> =EntityDocument.getElementsByTagName(tag).item(0);
>           Node resultNode = myDocument.importNode(NodeToInsert,true);
>      }
> 
> But what happens is that the old Node is deleated, but the new one is not
> imported. I parse the right document an get the right node, or let me say,
> various println make me think so. There is no Error occureing, no exception
> thrown, nothing.
> 
> If somebody has an idea or similar experience, please contact me.
> 

myDocument.importNode(NodeToInsert, true) makes a copy of NodeToInsert
into myDocument, but does not attach it in the DOM hierarchy. You should
add the following line after importNode() :
   hereToInsertNode.appendChild(resultNode);

Hope this helps.

> Sascha
> 
> PS: It would be very nice if you could put my e-mail-adress in cc, in the
> archives there are allways more postings than I get.....
> 
Ok.
-- 
Sylvain Wallez
Anyware Technologies - http://www.anyware-tech.com

---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faqs.html>

To unsubscribe, e-mail: <co...@xml.apache.org>
For additional commands, e-mail: <co...@xml.apache.org>