[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] crossreferencing any element


Subject: Re: [xsl] crossreferencing any element
From: James Cummings <James.Cummings@xxxxxxxxxxxxxx>
Date: Mon, 24 Nov 2003 13:33:37 +0000 (GMT)

On Mon, 24 Nov 2003, David Carlisle wrote:

> If your id attributes are  of type ID then you don't need
> to explictly tokenize as the id() function is designed to work with
> these space separated strings.

Ah! Now that makes sense.  Yes, the document has a DTD and @id is type
ID and corresp is type IDREFS.

> that's what modes are for, when you want to generate the links use
> apply-templates mode="link"
> and have mode="link" on the link making templates.
>
>
> In other words, assuming you have id or type ID
>
> <xsl:template match="para">
>   <p>
>   <xsl:copy-of select="@id"/>
>   <xsl:apply-templates select="id(@corresp)" mode="link"/>
>   <xsl:apply-templates/>
>   </p>
> </xsl:template>
>
> <xsl:template match="para" mode="link">
>  <a href="#{@id}">[xref to <xsl:value-of select="@id"/>]</a>
> </xsl:template>

Ok, that works when I know what the element is called.  When I
don't know what it is called, I'm assuming that I should then do
something like:

<xsl:template match="node()">
<xsl:copy>
 <xsl:copy-of select="@id"/>
 <xsl:apply-templates select="id(@corresp)" mode="link"/>
 <xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>


-James
---
Dr James Cummings, Oxford Text Archive, James.Cummings@xxxxxxxxxxxxxx

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread