xsl-list
[Top] [All Lists]

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

2007-05-18 06:52:04
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


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>