Am Dienstag, 5. März 2002 11:30 schrieben Sie: > I have experience with it: I wrote it... > What I can say is that the problem don't come from the component. > Sorry but I must repeat what I wrote in my previous email: you are creating > the elements of the DOM in the wrong namespace. Use createElementNS in you > cloning method instead of createElement and it will work.
Hi Stephane! Could you please tell how did you produced a SVGDocument from an svg source file? -- First I thought it's very simple and now I get every time new problems. But I am sure the deepCloneDocumen() method doesn't work correct. Now I use following code to solve the problem. -- private static Attr copyAttr (Attr attr, Document doc) { Attr newAttr = doc.createAttributeNS(attr.getNamespaceURI(), attr.getName()); newAttr.setValue(attr.getValue()); return newAttr; } public static Node cloneNodeRec(Node source, Document targetDoc) { Node result = null; NamedNodeMap attr; switch (source.getNodeType()) { case Node.DOCUMENT_NODE: break; case Node.ELEMENT_NODE: Element resultE = targetDoc.createElementNS(source.getNamespaceURI(), source.getNodeName()); attr = source.getAttributes(); for(int i = 0; i < attr.getLength();i++) { resultE.setAttributeNode(copyAttr((Attr) attr.item(i), targetDoc)); } NodeList children = source.getChildNodes(); if(children != null) { for (int i = 0; i < children.getLength(); i++) { resultE.appendChild(cloneNodeRec(children.item(i), targetDoc)); } } result = (Node) resultE; break; case Node.TEXT_NODE: Node txtNode = targetDoc.createTextNode(source.getNodeValue()); result = txtNode; break; case Node.PROCESSING_INSTRUCTION_NODE: ProcessingInstruction pi = (ProcessingInstruction) source; ProcessingInstruction resultPI = targetDoc.createProcessingInstruction( pi.getTarget(), pi.getData()); result = (Node) resultPI; break; default: Element resultD = targetDoc.createElementNS(source.getNamespaceURI(), source.getNodeName()); attr = source.getAttributes(); for(int i = 0; i < attr.getLength();i++) { resultD.setAttributeNode(copyAttr((Attr) attr.item(i), targetDoc)); } result = (Node) resultD; } return result; } /** * Deep clones a document using the given DOM implementation. */ public static Document deepCloneDocument(Document doc, DOMImplementation impl) { Element root = doc.getDocumentElement(); Document result = impl.createDocument(root.getNamespaceURI(), root.getNodeName(), null); Element rroot = result.getDocumentElement(); if (root.hasAttributes()) { NamedNodeMap attr = root.getAttributes(); int len = attr.getLength(); for (int i = 0; i < len; i++) { rroot.setAttributeNode(copyAttr((Attr) attr.item(i), result)); } } NodeList children = root.getChildNodes(); if(children != null) { for (int i = 0; i < children.getLength(); i++) { rroot.appendChild(cloneNodeRec(children.item(i), result)); } } return result; } public static SVGDocument domToSVGDom (Document doc) { SVGDocument svgDoc; SVGDOMImplementation impl = (SVGDOMImplementation) SVGDOMImplementation.getDOMImplementation(); svgDoc = (SVGDocument) deepCloneDocument(doc, impl); return svgDoc; } -- It produce a correct SVGDocument object (I can print out in a file, and then visualize using JSVGCanvas.setURI(fiename). Now I got the problem: java.lang.ClassCastException: org.apache.batik.dom.GenericElementNS at org.apache.batik.dom.svg.SVGOMDocument.getRootElement(Unknown Source) at org.apache.batik.swing.svg.JSVGComponent.setSVGDocument(Unknown Source) at tcldbc.TclDBSVGViewer.viewTable(TclDBSVGViewer.java:109) -- I have no Idea what "getRootElement" is, and what the meaning of "Unknown Source"? which source? -- Sorry for disturbing you so much with my problems! Morad. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]