xsl-list
[Top] [All Lists]

RE: [xsl] RE: Counting preceding elemets of similar node, but in different branch

2008-07-23 06:23:40
Using position() looks perfectly correct here if your xsl:apply-templates is
written the way you say it is. It wouldn't be correct however if you reach
the QUESTION elements indirectly via intermediate elements. Perhaps you need
to show a more complete stylesheet.

It might be safer however to use <xsl:number level="any"/>.

Michael Kay
http://www.saxonica.com/ 

-----Original Message-----
From: Karlmarx Rajangam 
[mailto:karlmarx(_dot_)rajangam(_at_)questionmark(_dot_)co(_dot_)uk] 
Sent: 23 July 2008 14:16
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] RE: Counting preceding elemets of similar 
node, but in different branch

I have requirement to display certain id's in a sequential 
numbering order. My xml is something like [and pls ignore any 
spell / case mistakes]

      <root>
              <something>
                      <assessQ>
                              <header/>
                              <Block>
                                      <blockID>xxxx</blockID>
                                      <questions>
                                              <QUESTION ID="1" />
                                              <QUESTION ID="2" />
                                              <QUESTION ID="3"/>
                                      </questions>
                              </Block>
                      </assessQ>
                      <assessQ>
                              <header/>
                              <Block>
                                      <blockID>yyy</blockID>
                                      <questions>
                                              <QUESTION ID="1" />
                                              <QUESTION ID="2" />
                                      </questions>
                              </Block>
                      </assessQ>
              </something>
      </root>         
      
And in my xslt (Ver 1), I have something like 
<xsl:apply-templates 
select="something/assessQ/Block/questions"/> [I think I 
cannot change this due to various other elements]
      
And what I am do is something like
1= 1
2= 2
3= 3
4= 1
5= 2 and so on....

so, i tried to use position, 

<xsl:template match="QUESTION">
      <xsl:value-of select="position()"/> = <xsl:value-of 
select="@ID"/><br/>
</xsl:template>       

but I released the mistake after seeing the result, 3=3 is 
being followed by again by 1=1, ... instead of 4=1.

So, i think i must use preceding-sibling and/or some other 
logic to calculate how many <QUESTION/> elements are there 
before it. Pls can you suggest the best way to handle this? 
Hope there might be some solution?

Thanks,
karl


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



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