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]