Hi > > private SVGDocument doc2svgDoc (Document doc) { > > SVGDocument svgDoc; > > svgDoc = > (SVGDocument)org.apache.batik.dom.util.DOMUtilities.deepCloneDocument(doc, > org.apache.batik.dom.svg.SVGDOMImplementation.getDOMImplementation()); > > > return svgDoc; > > } > > I have not try to compile, but it should work ;-) > Hi,
thanks for help. 1. the "deepCloneDocument" doesn't work correct. It doesn't create attributes for the child nodes. This could be a bug in the "Node.cloneNode()" or "Document.importNode()" methods in the Batik implementation of Node, Document. ??? 2. There is no documentation for the DOMUtilities class in the batik Javadoc API? 3. I wrote the following method which work well for my purpose. --- public static Node cloneNodeRec(Node source, Document targetDoc) { String nodeName; int sourceType = source.getNodeType(); Node result = null; NamedNodeMap attr; NodeList children; switch (sourceType) { case Node.DOCUMENT_NODE: break; case Node.ELEMENT_NODE: nodeName = source.getNodeName(); Element resultE = targetDoc.createElement(nodeName); NamedNodeMap attrs = source.getAttributes(); for(int i = 0; i < attrs.getLength();i++) { Node current = attrs.item(i); resultE.setAttributeNode((Attr)targetDoc.importNode(attrs.item(i), true)); } 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; default: nodeName = source.getNodeName(); Element resultD = targetDoc.createElement(nodeName); NamedNodeMap attrs2 = source.getAttributes(); for(int i = 0; i < attrs2.getLength();i++) { Node current = attrs2.item(i); resultD.setAttributeNode((Attr)targetDoc.importNode(attrs2.item(i), true)); } result = (Node) resultD; // no children!! } 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((Attr)result.importNode(attr.item(i), true)); } } NodeList children = root.getChildNodes(); if(children != null) { for (int i = 0; i < children.getLength(); i++) { rroot.appendChild(cloneNodeRec(children.item(i), result)); } } return result; } --- --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]