RE: [xsl] id attribution in template match

Subject: RE: [xsl] id attribution in template match
From: "Trevor Nicholls" <trevor@xxxxxxxxxxxxxxxxxx>
Date: Tue, 29 Sep 2009 21:38:25 +1300
Aha, yes. Could I also use a key if the reference is to an external
document?

As in:
----
  <xsl:template match="jump[@srcfile]">
    <xsl:variable name="jfil" select="substring-before(@srcfile,'#')" />
    <xsl:variable name="jid" select="substring-after(@srcfile,'#')" />
    <xsl:for-each select="document($jfil,/)">
      <xsl:value-of select="normalize-space(id($jid))" />
    </xsl:for-each>
  </xsl:template>
----

But then how sensible is it to construct a key to multiple external
documents when there are probably only a few occasional references to them
(most jumps are to elements in the current document)?

Cheers
Trevor


-----Original Message-----
From: David Carlisle [mailto:davidc@xxxxxxxxx] 
Sent: Tuesday, 29 September 2009 9:15 p.m.
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] id attribution in template match



> The schema correctly identifies all id attributes as type xs:ID, and all
> idref attributes as type xs:IDREF.

that would work with a schema aware xslt 2 processor, otherwise not.

fix is simple though change id(@idref) to key('id',@idref) and
add 
<xsl:key name="id" match="*[@id]" use="@id"/>


> I know this won't work because the . in the last predicate matches the
> wrong element.
you could use current() instead of ., but using key is easier.

David



________________________________________________________________________
The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.

This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs. 
________________________________________________________________________

Current Thread