[Home] [By Thread] [By Date] [Recent Entries]
I'm trying to transform xml derived from an MS Project plan. I'm
trying to create a table where each row identifies the resource (person) assigned to a particular task, but when I loop through the source, the resource name appears only once. I'm tapped out and tried everything I can think of. This is a 1.0 stylesheet and I'm using Saxon 6.5.5 The xml looks like this:
My stylesheet looks like this: <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html"/>
<xsl:key name="task" match="Task" use="UID"/>
<xsl:key name="job" match="Assignment" use="TaskUID"/>
<xsl:key name="worker" match="Resource" use="UID"/><xsl:template match="/"> <html>
<head></head>
<body>
<xsl:for-each select="//Task">
<xsl:for-each select="key('task',UID)">
<tr>
<td>
<xsl:value-of select="key
('task',UID)/Name"/>
</td>
<td>
<xsl:value-of select="key
('task',UID)/UID"/>
</td>
<td>
<xsl:call-template name="get-uid">
<xsl:with-param name="rid"
select="key('task',UID)/ResourceUID"/>
</xsl:call-template>
</td>
</tr>
</xsl:for-each>
</xsl:for-each>
</body>
</html>
</xsl:template> <xsl:template name="get-uid">
<xsl:param name="rid"/>
<xsl:call-template name="get-name">
<xsl:with-param name="rid"/>
</xsl:call-template>
</xsl:template> <xsl:template name="get-name">
<xsl:param name="rid"/>
<xsl:value-of select="key('worker',UID)/Name"/>
</xsl:template>
</xsl:stylesheet>The results look like this: <html>
<head>
</head>
<body>
<tr>
<td>Do something</td>
<td>1</td>
<td>Tom</td>
</tr>
<tr>
<td>Do something else</td>
<td>2</td>
<td>Dick</td>
</tr>
<tr>
<td>Do everything else</td>
<td>3</td>
<td>Harry</td>
</tr>
<tr>
<td>A job</td>
<td>4</td>
<td></td>
</tr>
<tr>
<td>A biggger job</td>
<td>5</td>
<td></td>
</tr>
<tr>
<td>the biggest job</td>
<td>6</td>
<td></td>
</tr>
</body>
</html>
------- bob wilkins -------
|

Cart



