[xsl] Line SVG charts via XSLT

Subject: [xsl] Line SVG charts via XSLT
From: Thorsten Richter <Richter@xxxxxxxxxxxxxxxxxx>
Date: Fri, 6 Jul 2001 16:09:18 +0200
Hello, I'm working for a little project to transform XML with XSL(T) in a
SVG line chart. 
For drawing lines in SVG I have to specify two points. For example, I would
like to draw a line with the y-coordinates of the three <natrium>-Tags in my
XML-file - the x-coordinates are maybe 50, 100, 150. 
I tried to do it with a <xsl:for-each> and a position() like shown in my
(simplified) XSL-file, but it doesn't work. My idea is something like ...
natrium[position + 1] ... for the following value. Can anybody help me??
Thanks a lot...
Thorsten Richter

<?xml version="1.0"?>
<laborviewer>
	<labor>
		<natrium>144</natrium>
		<kalium>4.3</kalium>
		<hb>9.1</hb>
	</labor>
	<labor>
		<natrium>150</natrium>
		<kalium>4.9</kalium>
		<hb>8.8</hb>
	</labor>
	<labor>
		<natrium>140</natrium>
		<kalium>5.0</kalium>
		<hb>8.0</hb>
	</labor>
</laborviewer>

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:xlink="http://w3.org/1999/xlink";>
<xsl:template match="/">
<xsl:apply-templates select="laborviewer"/>
</xsl:template>
<xsl:template match="laborviewer">
<svg height="100%" width="100%">
<xsl:for-each select="labor">
<xsl:apply-templates select=".">
<xsl:with-param name="x-offset"><xsl:value-of select="(position() *
50)"/></xsl:with-param>
<xsl:with-param name="y-natrium-after"><xsl:value-of
select="natrium[(position() + 1)]"/></xsl:with-param>
</xsl:apply-templates>
</xsl:for-each>
</svg>
</xsl:template>
<xsl:template match="labor">	
<xsl:param name="x-offset" select="' '"/>
<xsl:param name="y-natrium-after" select="' '"/>
<xsl:variable name="y-natrium"><xsl:value-of
select="natrium"/></xsl:variable>
<g style="fill:red; stroke:red; stroke-width:1">
<path>
<xsl:attribute name="id">
<xsl:text>line_row1</xsl:text></xsl:attribute>	
<xsl:attribute
name="style"><xsl:text>visibility:visible</xsl:text></xsl:attribute> 
<xsl:attribute name="d">
<xsl:text>M </xsl:text><xsl:value-of select="$x-offset"/><xsl:text>
</xsl:text><xsl:value-of select="$y-natrium"/>
<xsl:text> L </xsl:text><xsl:value-of select="$x-offset + 28"/><xsl:text>
</xsl:text><xsl:value-of select="$y-natrium-after"/>
</xsl:attribute>
</path>
</g>
</xsl:template>
</xsl:stylesheet>

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread