xmlgraphics-batik-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <Michael.Osterh...@Emerson.com>
Subject How to resolve SVGOMUseElement fragments?
Date Wed, 17 Oct 2012 10:04:22 GMT
Hallo,

I'm very new to batik, and I spent several hours with Google to find a solution for my problem,
but without success.
I'm trying to parse a SVG which uses several "use" tags with "xlink:href". The goal is to
transform the svg into dxf format. The "parent" SVG can consist of many use-tags, that address
external SVG files with fragments (#):

<svg>
	...
	<use xlink:href="file:/C:/files/mySVG_1.SVG#Fragment_1" x="0" y="0"/>
	<use xlink:href="file:/C:/files/mySVG_2.SVG#Fragment_2" x="0" y="0"/>
	...
</svg>


The external files themselves consist of several group-tags, that can be addressed by internal
fragments again, e. g. "mySVG_1.SVG":


<svg>
	...
	<g id=" Fragment_1" >
		<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#internalFragment_1"/>
		<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#internalFragment_2"/>
	</g>
	...
	<g id="internalFragment_1" >
		<circle cx="491.5" cy="130" r="12.5" />    
		...
		<path d="M 477 210 L 513 210 L 513 50 L 477 50  z" />
		...
	</g>
	<g id="internalFragment_2" >
		...
	</g>
	...
</svg>


What I need is the "primitives" of the "internalFragment_1" (circles, paths, rectangles, etc.)
to pass them to the appropriate dxf-methods.
In my SVG-parsing code I can detect the "SVGOMUseElement". I "manually" load the external
SVG (e. g. "mySVG_1.SVG") and recursively call my parsing method with it:

void myTransform(Document doc, dxfContext);
...
else if (node instanceof SVGOMUseElement)
{
	Document innerDoc = loadDocument(XLinkSupport.getXLinkHref((Element) n));
	if (innerDoc != null)
	{
		myTransform(innerDoc, dxfContext);
	}
	else
	{
		//if loadDocument (my own method) returns null, the link target was not an external file
but a simple internal fragment
		//what to do here to resolve the internalFragments down to the primitives?	
	}
...


But when I get the internal SVGOMUseElement addressed by "Fragment_1" I don't know how to
resolve the content of the addressed "internalFragment_1". There are no childNodes or a shadowtree
or something like that. 
What is the right way to resolve the internal fragment of a SVG to get its' primitives?
Thank you very much for your help.

Kind Regards.

Michael

---------------------------------------------------------------------
To unsubscribe, e-mail: batik-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-users-help@xmlgraphics.apache.org


Mime
View raw message