xsl-list
[Top] [All Lists]

RE: Problem for : increment a variable in a for-each?

2004-11-26 17:17:12
Hi Andrew:

   Thanks for help.
   I update xsl file using the template now I have
figure out most of them except that one problems.How I
can find the current node position inside the correct
group?


my XSL file:
<xsl:template match="SubjectLists">
           <xsl:apply-templates />
         </xsl:template>                
       <xsl:template match="Subject_List" >
       <xsl:choose>
                        <xsl:when test="Subject_Parent_ID=1">
                                                    <xsl:choose>
                                                                                
        <xsl:when
test="not(preceding-sibling::Subject_List)">
                                                        
<b><xsl:value-of select="Subject_Title"/></b>
                                                                                
        </xsl:when>
                                                                                
        <xsl:when
test="not(following-sibling::Subject_List)">
                                                                                
               <b> ;<xsl:value-of
select="Subject_Title"/></b>
                                                                                
        </xsl:when>
                                                                                
        <xsl:otherwise>
                                                                                
                   <b> and  <xsl:value-of
select="Subject_Title"/></b>
                                                                                
        </xsl:otherwise>
                                 </xsl:choose>  
                                   <xsl:call-template
name="findChildNode">
                                                                                
   <xsl:with-param name="ParentID"
select="Subject_ID"/>
                                  </xsl:call-template>

                     </xsl:when> 
                     <xsl:otherwise>
                          <xsl:call-template
name="findParentNode">
                                  <xsl:with-param
name="ID" select="Subject_Parent_ID"/>
                          </xsl:call-template> 
                    </xsl:otherwise>  
            </xsl:choose>                   
        </xsl:template> 
        <xsl:template name="findChildNode">
               <xsl:param name="ParentID"/>
                   <xsl:for-each
select="../Subject_List[Subject_Parent_ID=$ParentID]">
                     <xsl:choose>
                              <xsl:when
test="position()=1 and last() &gt;2 ">
                                                                 <b> ( 
<xsl:value-of
select="Subject_Title"/></b>
                                          </xsl:when>
                                              <!--only one-->
                                                         <xsl:when 
test="position()=1 and last()=1">
                                                                 <b> ( 
<xsl:value-of
select="Subject_Title"/> )</b>
                                          </xsl:when>
                                          <!--only two-->
                                          <xsl:when test="position()=1 and 
last()=2 ">
                                                                 <b> ( 
<xsl:value-of
select="Subject_Title"/> </b>
                                          </xsl:when>
                                          <xsl:when test="position()!=1 and
position()=last()">
                                           <b> and
<xsl:value-of select="Subject_Title"/> )</b>          
    
                                          </xsl:when>
                                           <xsl:otherwise>
                                                 <b> ; <xsl:value-of
select="Subject_Title"/></b>           
                                          </xsl:otherwise> 
                                        </xsl:choose>          
                </xsl:for-each>
        </xsl:template>
        <xsl:template name="findParentNode" >
               <xsl:param name="ID"/>
                         <xsl:if 
test="count(../Subject_List[Subject_ID=$ID]) = 0">
                              <xsl:choose>
                                                                <xsl:when
test="not(preceding-sibling::Subject_List)">
                                                        
<b><xsl:value-of select="Subject_Title"/></b>
                                                                </xsl:when>
                                                                <xsl:when
test="not(following-sibling::Subject_List)">
                                                                                
               <b> ;<xsl:value-of
select="Subject_Title"/></b>
                                                                </xsl:when>
                                                                <xsl:otherwise>
                                                                                
                   <b> and  <xsl:value-of
select="Subject_Title"/></b>
                                                        </xsl:otherwise>
                                     </xsl:choose>                      
                              </xsl:if>    
         </xsl:template>   
XML file:
 <root>
<SubjectLists>
   <Subject_List>
                <Subject_ID>31</Subject_ID> 
                <Subject_Title>Biology</Subject_Title> 
                <Subject_Parent_ID>30</Subject_Parent_ID> 
</Subject_List>
  <Subject_List>
                <Subject_ID>32</Subject_ID> 
<Subject_Title>Chemistry</Subject_Title> 
<Subject_Parent_ID>30</Subject_Parent_ID> 
 </Subject_List>
   <Subject_List>
                <Subject_ID>24</Subject_ID> 
<Subject_Title>Legal Studies</Subject_Title> 
<Subject_Parent_ID>1</Subject_Parent_ID> 
  </Subject_List>
 <Subject_List>
                <Subject_ID>17</Subject_ID> 
<Subject_Title>Music</Subject_Title> 
<Subject_Parent_ID>14</Subject_Parent_ID> 
  </Subject_List>
     <Subject_List>
                <Subject_ID>30</Subject_ID> 
                <Subject_Title>Science</Subject_Title> 
                <Subject_Parent_ID>1</Subject_Parent_ID> 
  </Subject_List>
    <Subject_List>
  <Subject_ID>18</Subject_ID> 
  <Subject_Title>Visual Arts</Subject_Title> 
                  <Subject_Parent_ID>14</Subject_Parent_ID> 
 </Subject_List>
  </SubjectLists>
</root>



Now the result is:

and Legal Studies and Music and Science ( Biology and
Chemistry ) ;Visual Arts 


the correct result should be:

Legal Studies ; Music ; Science ( Biology and
Chemistry ) and Visual Arts 

the reason thst wrong resut is that the 

preceding-sibling::Subject_List 
following-sibling::Subject_List

should be one group ( That gourp include all node
whihc subject_parent_ID is 1  or subject_parent_ID is
not one but its parent didn;t exsit(example
node:subject_ID is 17 and subject_ID is 18)

Thanks
Helena




______________________________________________________________________ 
Post your free ad now! http://personals.yahoo.ca

--~------------------------------------------------------------------
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>
--~--