Subject: RE: help with select
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 9 Feb 2006 17:03:10 -0000
|
I haven't studied the question closely but you probably want
footnote[@id=current()/@fnref]
Note that ./@fnref means the same as @fnref, so
footnote[@id=./@fnref]
looks for a footnote whose id and fnref attributes have the same value.
Following cross-references is often best done using keys: it's certainly
more efficient and many people say the code is clearer. Look up xsl:key.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Jiang, Peiyun [mailto:Peiyun.Jiang@xxxxxxxxxxxxxx]
> Sent: 09 February 2006 16:20
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: help with select
>
> I'm trying to made the following code work:
> ./footnote|//footnote[@id=./@fnref]
>
> I want to select the child footnote element of author and any
> footnote that its id attribute matches the fnref attribute of
> the author.
>
> In footnote[@id=./@fnref], is "." referring to author or to
> footnote? How do you refer author?
>
> Thanks.
>
> Peiyun
>
>
> <xsl:template match="author">
> <!-- something here -->
> <xsl:choose>
> <xsl:when
> test="count(./footnote|//footnote[@id=./@fnref]) = 1">
> <xsl:apply-templates
> select="./footnote|//footnote[@id=./@fnref]"/>
> </xsl:when>
>
> <xsl:when
> test="count(./footnote|//footnote[@id=./@fnref]) > 1">
> <xsl:for-each
> select="./footnote|//footnote[@id=./@fnref]">
> <xsl:choose>
> <xsl:when test="position() = last()">
> <xsl:apply-templates select="." />
> </xsl:when>
> <xsl:when test="position() != last()">
> <xsl:apply-templates select="." />
> <sup>,<xsl:text> </xsl:text></sup>
> </xsl:when>
> </xsl:choose>
> </xsl:for-each>
> </xsl:when>
> </xsl:choose>
>
> <!-- some other things here -->
> </xsl:template>
|