raghzz
raghzz

Reputation: 169

XSL sibling count

How do I get relative position of a node in a given XML. I want to only consider "b" node in "a" node not in x-> y -> b, I get b count as 1,2,3,4 not 3,4,5,6. I have tried "multiple" and "any" in xsl:number but does not work.

   <x>
     <y>
       <b></b>
       <b></b>
     </y>
   </x>
   <a>
      <b></b>
      <b></b>
   </a>
   <a>
     <b></b>
     <b></b>
   </a>

<xsl:for-each select="a">
            <dummy>
            <xsl:for-each select="b">
                <xsl:variable name="pos" select="position()" />
                <dummy2><xsl:number level="any"/></dummy2>
            </xsl:for-each>
           </dummmy>
</xsl:for-each>

I expect dummy2 to have 1,2,3,4 values.

<dummy>
    <dummy2>1<dummy2>
    <dummy2>2<dummy2>
</dummmy>
<dummy>
    <dummy2>3<dummy2>
    <dummy2>4<dummy2>
</dummmy>

Upvotes: 0

Views: 59

Answers (2)

Tim C
Tim C

Reputation: 70648

You can still do this with xsl:number.

Try this...

<dummy2><xsl:number level="any" count="b[parent::a]" /></dummy2>

Or maybe this...

<dummy2><xsl:number level="any" count="a/b" /></dummy2>

Upvotes: 3

Rupesh_Kr
Rupesh_Kr

Reputation: 3445

Try This:

    <xsl:for-each select="a">
        <dummy>
            <xsl:for-each select="b">
                <dummy2><xsl:value-of select="count(preceding::b[parent::a])+1" /></dummy2>
            </xsl:for-each>
        </dummy>
    </xsl:for-each>

Upvotes: 0

Related Questions