Re: [xsl] Reshuffling elements

Subject: Re: [xsl] Reshuffling elements
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Tue, 26 Oct 2004 15:19:00 +0100
Hi Morten,

> I can extend this to heart's content, by adding more blocks, and
> increasing the DATA[1] to DATA[2], DATA[3] and so on, but I would
> rather have solution for any number of auxiliary links.

If I understand correctly, I think you need:

  <xsl:variable name="categories" select="fmp:COL[5]/fmp:DATA" />
  <xsl:variable name="names" select="fmp:COL[6]/fmp:DATA" />
  <xsl:variable name="urls" select="fmp:COL[7]/fmp:DATA" />
  
  <xsl:for-each select="$categories">
    <xsl:variable name="pos" select="position()" />
    <p>
      <em><xsl:value-of select="." />: </em>
      <xsl:value-of select="$names[$pos]" />
      <xsl:text>, URL: </xsl:text>
      <xsl:value-of select="$urls[$pos]" />
    </p>
  </xsl:for-each>

> When I try the following;
>
>     <xsl:for-each select="fmp:COL[6]/fmp:DATA">
>       <xsl:param name="n_pos" select="position()" />
>
>         <p>
>         <xsl:value-of select="$n_pos" />. 
>          <xsl:value-of select="." />, 
>         <xsl:value-of select="../following-sibling/child[1]" /> 
>         </p>
>     </xsl:for-each>

Note that <xsl:param> isn't legal within <xsl:for-each> (your
processor should give you an error). The path
"../following-sibling/child[1]" says "give me the first <child>
element child of each <following-sibling> element child of my parent".
I think you were aiming for something like:

  ../following-sibling::*/child::*[1]

which means "give me the first child of each following sibling of my
parent" (although that wouldn't give you what you were after either --
see above for a solution).

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/

Current Thread