Subject: RE: error testing id() in external document
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Fri, 19 Oct 2007 18:21:34 +0100
|
In XSLT 1.0 you can't use a function call on the rhs of "/". You need to use
xsl:for-each to set the context node for id():
<xsl:for-each select="document(..)">
<xsl:if test="id($jid) = 'footnote'>...
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Trevor Nicholls [mailto:trevor@xxxxxxxxxxxxxxxxxx]
> Sent: 19 October 2007 17:56
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: error testing id() in external document
>
>
> Using xsltproc (libxml), and thus inside an <xsl:stylesheet
> version="1.0">, the following template generates an error:
>
> <xsl:template match="jump[@srcfile]">
> <xsl:variable name="jfil"
> select="substring-before(@srcfile,'#')" />
> <xsl:variable name="jid" select="substring-after(@srcfile,'#')" />
> <!-- footnotes are an invalid external reference -->
> <xsl:if test="local-name(document($jfil,/)/id($jid)) = 'footnote'">
> <xsl:message terminate="yes">
> <xsl:text>Footnote reference to external document (</xsl:text>
> <xsl:value-of select="@srcfile" />
> <xsl:text> found in </xsl:text>
> <xsl:value-of select="$myfullself" />
> </xsl:message>
> </xsl:if>
> </xsl:template>
>
> The error is:
>
> XPath error : Invalid expression
> xsl:if : could not compile test expression 'local-name(.. etc.
>
> Is that really an invalid expression? Is there a valid
> expression that will achieve the same thing?
>
> Thanks
> Trevor
|