I have a xml file and i want to format it using XSL
I needed to do a distinct which is ok on the first node "Code"
But when it gets to the "programDescrip tion" node it prints out values for
both Code="PRG004"
and PRG005 which is CrazyTraining 2 and Program6
I want CrazyTraining 2 for PRG004 and Program6 for PRG005
Any help?
Thx
XSL file
--------
<xsl:styleshe et version="1.0"
xmlns:xsl="http ://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" />
<!--
Get distinct programs into variable
//-->
<xsl:variable name="uniqueCod e"
select="//ProgramDetail[not(Code=preced ing-sibling::Progra mDetail/Code)]/Cod
e"/>
<xsl:variable name="uniquePro gramDesc"
select="//ProgramDetail[not(programDesc ription=precedi ng-sibling::Progra mDet
ail/programDescript ion)]/programDescript ion"/>
<xsl:variable name="uniqueCou rsecode"
select="//ProgramDetail[not(CourseCode= preceding-sibling::Progra mDetail/Cour
seCode)]/CourseCode"/>
<xsl:variable name="uniqueCou rseDesc"
select="//ProgramDetail[not(CourseDescr iption=precedin g-sibling::Progra mDeta
il/CourseDescripti on)]/CourseDescripti on"/>
<xsl:variable name="uniqueMod uleCode"
select="//ProgramDetail[not(ModuleCode= preceding-sibling::Progra mDetail/Modu
leCode)]/ModuleCode"/>
<xsl:variable name="uniqueMod uleDesc"
select="//ProgramDetail[not(uniqueModul eDesc=preceding-sibling::Progra mDetai
l/uniqueModuleDes c)]/ModuleCode"/>
<!--
Reflect to root node and form the HTML page
//-->
<xsl:template match="/">
<html>
<head>
<title>
Programs to be sent
</title>
</head>
<body>
<table border="1">
<tr>
<td><b>Code</b></td>
<td><b>Counts </b></td>
<td><b>Progra m Description</b></td>
<td><b>Course Code</b></td>
<td><b>Course Description</b></td>
</tr>
<!--
Process specified template
//-->
<xsl:call-template name="processpr ogramdetail"/>
<xsl:call-template name="processpr ogramdetail2"/>
<!--
<xsl:call-template name="processpr ogramdetail3"/>
<xsl:call-template name="processpr ogramdetail4"/>
<xsl:call-template name="processpr ogramdetail5"/>
-->
</table>
<table border="1">
<tr>
<td>
<xsl:call-template name="processpr ogramdetail3"/>
</td>
<td>
<xsl:call-template name="processpr ogramdetail4"/>
</td>
<td>
<xsl:call-template name="processpr ogramdetail5"/>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
<xsl:template name="processpr ogramdetail">
<!--
Process each distinct Code
//-->
<xsl:for-each select="$unique Code">
<!--
Sort by manufacturer
//-->
<xsl:sort select="." />
<!--
Output the Codes into first row
//-->
<tr>
<td><xsl:valu e-of select="." /></td>
<td><xsl:text>& #xa0;</xsl:text></td>
<td><xsl:text>& #xa0;</xsl:text></td>
</tr>
<!--
Gets all program Desc listed
//-->
<xsl:variable name="programDe scription"
select="//ProgramDetail[code=current()]/programDescript ion" />
<tr>
<td><xsl:text>& #xa0;</xsl:text></td>
<!--
Output count of ProgramDescript ion
//-->
<td valign="top">
<xsl:value-of select="count($ programDescript ion)" /></td>
<td valign="top">
<!--
Process Program Description and print them out
//-->
<xsl:for-each select="$unique ProgramDesc">
<xsl:sort select="." />
<xsl:value-of select="current ()" /><br/>
</xsl:for-each>
</td>
</tr>
<tr>
<td><xsl:text>& #xa0;</xsl:text></td>
<td><xsl:text>& #xa0;</xsl:text></td>
<td><xsl:text>& #xa0;</xsl:text></td>
<td valign="top">
<!--
Process Program description print them out
//-->
<!--
<xsl:for-each select="$progra mDescription">
-->
<xsl:for-each select="$unique Coursecode">
<xsl:sort select="." />
<xsl:value-of select="current ()" />
<br/>
</xsl:for-each>
</td>
</tr>
<tr>
<td><xsl:text>& #xa0;</xsl:text></td>
<td><xsl:text>& #xa0;</xsl:text></td>
<td><xsl:text>& #xa0;</xsl:text></td>
<td><xsl:text>& #xa0;</xsl:text></td>
<td valign="top">
<!--
Process Program description print them out
//-->
<!--
<xsl:for-each select="$progra mDescription">
-->
<xsl:for-each select="$unique CourseDesc">
<xsl:sort select="." />
<xsl:value-of select="current ()" />
<br/>
</xsl:for-each>
</td>
</tr>
<xsl:variable name="owners"
select="//ProgramDetail[programDescript ion=current()]/programDescript ion" />
</xsl:for-each>
</xsl:template>
<xsl:template name="processpr ogramdetail2">
<xsl:for-each select="$unique Code">
<xsl:sort select="." />
<tr>
<td><xsl:valu e-of select="." /></td>
<td><xsl:text>& #xa0;</xsl:text></td>
<td><xsl:text>& #xa0;</xsl:text></td>
</tr>
<tr>
<td><xsl:text>& #xa0;</xsl:text></td>
<td>
<xsl:for-each select="$unique ProgramDesc">
<xsl:sort select="." />
<xsl:value-of select="." /><br/>
</xsl:for-each>
</td>
<td><xsl:text>& #xa0;</xsl:text></td>
</tr>
</xsl:for-each>
<!--
<xsl:for-each select="$unique Coursecode">
<xsl:sort select="." />
<xsl:value-of select="." /><br/>
</xsl:for-each>
<xsl:for-each select="$unique CourseDesc">
<xsl:sort select="." />
<xsl:value-of select="." /><br/>
</xsl:for-each>
<tr>
<td><xsl:text>& #xa0;</xsl:text></td>
<td>
<xsl:for-each select="$unique Coursecode">
<xsl:sort select="." />
<xsl:value-of select="." /><br/>
</xsl:for-each>
</td>
<td>
<xsl:for-each select="$unique CourseDesc">
<xsl:sort select="." />
<xsl:value-of select="." /><br/>
</xsl:for-each>
</td>
<td><xsl:text>& #xa0;</xsl:text></td>
<td><xsl:text>& #xa0;</xsl:text></td>
</tr>
-->
<!--
Output the Codes into first row
//-->
</xsl:template>
<xsl:template name="processpr ogramdetail3">
<xsl:for-each select="$unique Code">
<xsl:sort select="." />
<xsl:value-of select="." /> <br/>
</xsl:for-each>
</xsl:template>
<xsl:template name="processpr ogramdetail4">
<xsl:for-each select="$unique ProgramDesc">
<xsl:sort select="." />
<xsl:value-of select="." /><br/>
</xsl:for-each>
</xsl:template>
<xsl:template name="processpr ogramdetail5">
<xsl:for-each select="$unique CourseDesc">
<xsl:sort select="." />
<xsl:value-of select="." /><br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
XML file
--------------
<?xml version="1.0" standalone="yes "?>
<?xml-stylesheet type="text/xsl" href="testemail .xsl"?>
<NewDataSet>
<ProgramDetai l>
<Code>PRG004</Code>
<programDescrip tion>Crazy Training 2</programDescript ion>
<CourseCode>MAT 01</CourseCode>
<DurationHours> 8</DurationHours>
<CourseDescript ion>Maths For Beginners</CourseDescripti on>
<ModuleCode>TES T101</ModuleCode>
<ModuleDescript ion>Test Module</ModuleDescripti on>
</ProgramDetail>
<ProgramDetai l>
<Code>PRG004</Code>
<programDescrip tion>Crazy Training 2</programDescript ion>
<CourseCode>PHS 101</CourseCode>
<DurationHours> 36</DurationHours>
<CourseDescript ion>Physics</CourseDescripti on>
<ModuleCode>TES T101</ModuleCode>
<ModuleDescript ion>Test Module</ModuleDescripti on>
<PreReqCourseCo de>MAT234</PreReqCourseCod e>
</ProgramDetail>
<ProgramDetai l>
<Code>PRG004</Code>
<programDescrip tion>Crazy Training 2</programDescript ion>
<CourseCode>PHS 101</CourseCode>
<DurationHours> 36</DurationHours>
<CourseDescript ion>Physics</CourseDescripti on>
<ModuleCode>TES T103</ModuleCode>
<ModuleDescript ion>TESTMODULEW ITHLONGNAME</ModuleDescripti on>
<PreReqCourseCo de>MAT234</PreReqCourseCod e>
</ProgramDetail>
<ProgramDetai l>
<Code>PRG005</Code>
<programDescrip tion>Program 6</programDescript ion>
<CourseCode>COU RSE102</CourseCode>
<DurationHours> 5</DurationHours>
<CourseDescript ion>Course for learning Courses</CourseDescripti on>
<ModuleCode>MOD ULE101</ModuleCode>
<ModuleDescript ion>Module 1</ModuleDescripti on>
</ProgramDetail>
<ProgramDetai l>
<Code>PRG005</Code>
<programDescrip tion>Program 6</programDescript ion>
<CourseCode>MAT 01</CourseCode>
<DurationHours> 8</DurationHours>
<CourseDescript ion>Maths For Beginners</CourseDescripti on>
<ModuleCode>TES T101</ModuleCode>
<ModuleDescript ion>Test Module</ModuleDescripti on>
</ProgramDetail>
<ProgramDetai l>
<Code>PRG005</Code>
<programDescrip tion>Program 6</programDescript ion>
<CourseCode>MAT 234</CourseCode>
<DurationHours> 8</DurationHours>
<CourseDescript ion>Maths</CourseDescripti on>
<ModuleCode>TES T101</ModuleCode>
<ModuleDescript ion>Test Module</ModuleDescripti on>
<PreReqCourseCo de>MAT01</PreReqCourseCod e>
</ProgramDetail>
<ProgramDetai l>
<Code>PRG005</Code>
<programDescrip tion>Program 6</programDescript ion>
<CourseCode>MAT 234</CourseCode>
<DurationHours> 8</DurationHours>
<CourseDescript ion>Maths</CourseDescripti on>
<ModuleCode>TES T101</ModuleCode>
<ModuleDescript ion>Test Module</ModuleDescripti on>
<PreReqCourseCo de>MAT101</PreReqCourseCod e>
</ProgramDetail>
<ProgramDetai l>
<Code>PRG005</Code>
<programDescrip tion>Program 6</programDescript ion>
<CourseCode>MAT 234</CourseCode>
<DurationHours> 8</DurationHours>
<CourseDescript ion>Maths</CourseDescripti on>
<ModuleCode>TES T101</ModuleCode>
<ModuleDescript ion>Test Module</ModuleDescripti on>
<PreReqCourseCo de>PHS101</PreReqCourseCod e>
</ProgramDetail>
<ProgramDetai l>
<Code>PRG005</Code>
<programDescrip tion>Program 6</programDescript ion>
<CourseCode>MAT 234</CourseCode>
<DurationHours> 8</DurationHours>
<CourseDescript ion>Maths</CourseDescripti on>
<ModuleCode>TES T102</ModuleCode>
<ModuleDescript ion>TestModule2 </ModuleDescripti on>
<PreReqCourseCo de>MAT01</PreReqCourseCod e>
</ProgramDetail>
<ProgramDetai l>
<Code>PRG005</Code>
<programDescrip tion>Program 6</programDescript ion>
<CourseCode>MAT 234</CourseCode>
<DurationHours> 8</DurationHours>
<CourseDescript ion>Maths</CourseDescripti on>
<ModuleCode>TES T102</ModuleCode>
<ModuleDescript ion>TestModule2 </ModuleDescripti on>
<PreReqCourseCo de>MAT101</PreReqCourseCod e>
</ProgramDetail>
<ProgramDetai l>
<Code>PRG005</Code>
<programDescrip tion>Program 6</programDescript ion>
<CourseCode>MAT 234</CourseCode>
<DurationHours> 8</DurationHours>
<CourseDescript ion>Maths</CourseDescripti on>
<ModuleCode>TES T102</ModuleCode>
<ModuleDescript ion>TestModule2 </ModuleDescripti on>
<PreReqCourseCo de>PHS101</PreReqCourseCod e>
</ProgramDetail>
</NewDataSet>