|
Subject: RE: [xsl] probably a XPath mistake From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Tue, 30 Jan 2007 08:58:45 -0000 |
This does look as if the JDK 5 processor had a pretty nasty bug.
The code seems to be written on the assumption that
key('vertex',@from)
will select data from EMBEDDING.XML; but the context node at the time is in
GRAPH.XML, so that is where the key should search. I'm afraid the fix for
this in XSLT 1.0 is tedious: my advice, since you're switching processors
anyway, would be to switch to XSLT 2.0 and Saxon, where you can write
key('vertex', @from, $embedding)
having declared the global variable:
<xsl:variable name="embedding" select="/"/>
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Nico Van Cleemput [mailto:Nicolas.VanCleemput@xxxxxxxx]
> Sent: 30 January 2007 07:46
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] probably a XPath mistake
>
> Hi,
>
> in our application we use XSLT to construct a svg from some
> of our XML-files. This worked find with java 5 until recently
> someone upgraded to java 6 and it no longer works. I guess
> there was always something wrong but the standard XSLT
> processor in Java 5 probably wasn't that strict.
>
> I have included the XSLT file, both the input files and the output.
> The problem is of course that there appears NaN. The
> transform is run on embedding.xml and document('graph')
> returns the graph.xml file. My guess is that the key looks
> for the coordinates inside the graph.xml file because
> everything works fine in the part that draws the vertices.
> The desired output is of course the output in java 5.
>
> Can anyone help me on this?
>
> Thanks,
> Nico Van Cleemput
> Ghent University
>
> XSLT:
> <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:transform
> version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/
> Transform" xmlns:svg="http://www.w3.org/2000/svg">
> <xsl:param name="linefactor"/>
> <xsl:key name="vertex" match="coordinates" use="@id"/>
> <xsl:template match="embedding">
> <svg:svg width="3" height="3">
> <xsl:apply-templates select="document('graph')/graph"/>
> <xsl:apply-templates select="coordinates"/>
> </svg:svg>
> </xsl:template>
> <xsl:template match="coordinates">
> <svg:circle r="{0.075*$linefactor}"
> style="stroke:black; stroke-width:{0.05*$linefactor};
> fill:white;" cx="{number(double[1]/ @value)+1.5}"
> cy="{1.5-number(double[2]/@value)}"/>
> </xsl:template>
> <xsl:template match="edge">
> <svg:line style="stroke:black; stroke-width:{0.05*
> $linefactor}; fill:none;" x1="{number(key('vertex',@from)/double[1]/
> @value)+1.5}"
> y1="{1.5-number(key('vertex',@from)/double[2]/@value)}"
> x2="{number(key('vertex',@to)/double[1]/@value)+1.5}"
> y2="{1.5-number (key('vertex',@to)/double[2]/@value)}"/>
> </xsl:template>
> </xsl:transform>
>
> EMBEDDING.XML:
> <?xml version="1.0" encoding="UTF-8"?>
> <embedding dimension="2">
> <coordinates id="0">
> <double value="-1.0" />
> <double value="-1.0" />
> </coordinates>
> <coordinates id="1">
> <double value="1.0" />
> <double value="1.0" />
> </coordinates>
> </embedding>
>
> GRAPH.XML:
> <?xml version="1.0" encoding="UTF-8"?>
> <graph nrofvertices="2">
> <edge from="0" to="1" />
> </graph>
>
>
> OUTPUT in java 5:
> <?xml version="1.0" encoding="UTF-8"?>
> <svg:svg xmlns:svg="http://www.w3.org/2000/svg" width="3" height="3">
> <svg:line style="stroke:black; stroke-width:0.025; fill:none;"
> x1="0.5" y1="2.5" x2="2.5" y2="0.5"/>
> <svg:circle r="0.0375" style="stroke:black;
> stroke-width:0.025; fill:white;" cx="0.5" cy="2.5"/>
> <svg:circle r="0.0375" style="stroke:black;
> stroke-width:0.025; fill:white;" cx="2.5" cy="0.5"/> </svg:svg>
>
> OUTPUT in java 6:
> <?xml version="1.0" encoding="UTF-8"?>
> <svg:svg xmlns:svg="http://www.w3.org/2000/svg" width="3" height="3">
> <svg:line style="stroke:black; stroke-width:0.025; fill:none;"
> x1="NaN" y1="NaN" x2="NaN" y2="NaN"/>
> <svg:circle r="0.0375" style="stroke:black;
> stroke-width:0.025; fill:white;" cx="0.5" cy="2.5"/>
> <svg:circle r="0.0375" style="stroke:black;
> stroke-width:0.025; fill:white;" cx="2.5" cy="0.5"/> </svg:svg>
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] probably a XPath mistake, George Cristian Bina | Thread | Re: [xsl] probably a XPath mistake, Nico Van Cleemput |
| Re: [xsl] probably a XPath mistake, George Cristian Bina | Date | Re: [xsl] probably a XPath mistake, Nico Van Cleemput |
| Month |