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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] xslt sort remove duplicat, Florent Georges | Thread | Re: [xsl] In Grouping - inconsitanc, Florent Georges |
RE: [xsl] Return system's date and , Bill Riegel | Date | Re: [xsl] In Grouping - inconsitanc, Florent Georges |
Month |