[xsl] In Grouping - inconsitance translate() behviour problem

Subject: [xsl] In Grouping - inconsitance translate() behviour problem
From: "Karlmarx Rajangam" <karlmarx.rajangam@xxxxxxxxxxxxxxxxxx>
Date: Fri, 18 May 2007 09:51:42 -0400
Hello,

Further referring to my earlier GROUPING q to combine two nodes to be
treated as one unique node, based on the feedback (Thanks Mr David) I
have modified the code to use translate() as suggested and it seems to
be working, only later to find, it DOES NOT work on some conditions.
Very strange and I do not have any clue! Not sure whether my code is
flawed. Please can someone have a look?

Basically, the xml has 5 main assessment types - Exam, Test, Quiz,
Survey and NotSet and we treat NotSet as Exam by using
"translate(assessmentType,'NotSet','Exam')", wherever required.

The translate works ok as expected if I try:
translate(assessmentType,'Quiz','Test')
translate(assessmentType,'Quiz','Exam')
translate(assessmentType,'Survey','Exam')
translate(assessmentType,'Survey','Quiz')

and fails when doing
translate(assessmentType,'NotSet','Exam') -> Is what needed
translate(assessmentType,'Quiz','Survey')"/>

Stripped down xslt:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
	<xsl:output method="html"/>
	<xsl:key name="schedule-by-assessmentType"
match="activeSchedule" use="translate(assessmentType,'NotSet','Exam')"/>
	<xsl:variable name="activeScheduleNodes"
select="//activeSchedule"/>
	<xsl:variable name="examCount"
select="count($activeScheduleNodes[assessmentType = 'Exam']) +
count($activeScheduleNodes[assessmentType = 'NotSet'])"/>
	<xsl:variable name="testCount"
select="count($activeScheduleNodes[assessmentType = 'Test'])"/>
	<xsl:variable name="quizCount"
select="count($activeScheduleNodes[assessmentType = 'Quiz'])"/>
	<xsl:variable name="surveyCount"
select="count($activeScheduleNodes[assessmentType = 'Survey'])"/>
	<xsl:template match="messageResponse">
		<html>
			<body>
				<xsl:apply-templates
select="//activeSchedule[generate-id(.) =
generate-id(key('schedule-by-assessmentType',
translate(assessmentType,'NotSet','Exam'))[1])]"/>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="activeSchedule">
		<xsl:choose>
			<xsl:when test="assessmentType = 'Exam' and
$examCount > 0">
				Exams  (<xsl:value-of
select="$examCount"/>)
				<xsl:call-template
name="selectAssessmentList"/>
			</xsl:when>
			<xsl:when test="assessmentType = 'NotSet' and
$examCount > 0">
				<!--THIS CONDITION EXECUTED? WHY? NOT
REQD, TEST-->
				Notsetsss  (<xsl:value-of
select="$examCount"/>)
				<xsl:call-template
name="selectAssessmentList"/>
			</xsl:when>
			<xsl:when test="assessmentType = 'Test' and
$testCount > 0">
				Tests  (<xsl:value-of
select="$testCount"/>)
				<xsl:call-template
name="selectAssessmentList"/>
			</xsl:when>
			<xsl:when test="assessmentType = 'Quiz' and
$quizCount > 0">
				Quizzes (<xsl:value-of
select="$quizCount"/>)
				<xsl:call-template
name="selectAssessmentList"/>
			</xsl:when>
			<xsl:when test="assessmentType = 'Survey' and
$surveyCount > 0">
				Surveyes (<xsl:value-of
select="$surveyCount"/>)
				<xsl:call-template
name="selectAssessmentList"/>
			</xsl:when>
		</xsl:choose>
	</xsl:template>
	<xsl:template name="selectAssessmentList">
		<table border="1">
			<tr bgcolor="#EAEAEA" align="center">
				<th>Titles	</th>
			</tr>
			<xsl:for-each
select="key('schedule-by-assessmentType',
translate(assessmentType,'NotSet','Exam'))">
				<xsl:sort select="scheduleName"/>
				<tr>
					<td>
						<xsl:value-of
select="scheduleName"/>
					</td>
				</tr>
			</xsl:for-each>
		</table>
	</xsl:template>
</xsl:stylesheet>


Stripped down xml:

<RequestResult>
	<messageResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns="">
		<action>AssessmentList</action>
		<data>
			<request>
				<activeScheduleCollection>
					<activeSchedule>

<assessmentType>Exam</assessmentType>
						<scheduleName>Exam
One</scheduleName>
					</activeSchedule>
					<activeSchedule>

<assessmentType>NotSet</assessmentType>
						<scheduleName>`NotSet`
type Assessment</scheduleName>
					</activeSchedule>
					<activeSchedule>

<assessmentType>Exam</assessmentType>
						<scheduleName>Exam 1,
unlimited</scheduleName>
					</activeSchedule>
					<activeSchedule>

<assessmentType>Exam</assessmentType>
						<scheduleName>Exam 2,
unlimited, resume possible</scheduleName>
					</activeSchedule>
					<activeSchedule>

<assessmentType>Quiz</assessmentType>
						<scheduleName>Quiz 1,
unlimited</scheduleName>
					</activeSchedule>
					<activeSchedule>

<assessmentType>Survey</assessmentType>
						<scheduleName>Survey 2,
unlimited</scheduleName>
					</activeSchedule>
					<activeSchedule>

<assessmentType>Test</assessmentType>
						<scheduleName>Financial
test Accounting</scheduleName>
					</activeSchedule>
				</activeScheduleCollection>
			</request>
		</data>
	</messageResponse>
</RequestResult>

Thanks in advance.
Karl R

Current Thread