xsl-list
[Top] [All Lists]

Re: Keys

2004-09-09 04:21:49
On Wed, 8 Sep 2004 22:43:07 -0700, Karl J. Stubsjoen
<karl(_at_)meetscoresonline(_dot_)com> wrote:
How do you manage this sort of key:
<xsl:key name="attType"
match="/root/*/xml/s:Schema/s:ElementType/s:AttributeType"
use="/root/*[(_at_)name()]"/>

I am trying to create a "USE" on a specific node who's name can very so:

root/class
root/house
root/bird

This select works great:
<xsl:for-each
select="/root/*[name()=$TABLE_NAME]/xml/s:Schema/s:ElementType/s:AttributeTy
pe">

Where $TABLE_NAME is a variable.

This can be done in a straight way and no variable reference is needed
in the xsl:key instruction.

Use:

 <xsl:key name="kAtt" match="attributeType"
   use="name(../../../..)"/>

and

     key('kAtt', '$vSomeName')

For example (namespaces from your example stripped intentionally):

This transformation:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
 
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:key name="kAtt" match="attributeType"
   use="name(../../../..)"/>

  <xsl:template match="/">
    <keyResults>
      <xsl:copy-of select="key('kAtt', 'a')"/>
      <xsl:copy-of select="key('kAtt', 'b')"/>
      <xsl:copy-of select="key('kAtt', 'c')"/>
    </keyResults>
  </xsl:template>
</xsl:stylesheet>

when applied on this source.xml:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
 
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:key name="kAtt" match="attributeType"
   use="name(../../../..)"/>

  <xsl:template match="/">
    <keyResults>
      <xsl:copy-of select="key('kAtt', 'a')"/>
      <xsl:copy-of select="key('kAtt', 'b')"/>
      <xsl:copy-of select="key('kAtt', 'c')"/>
    </keyResults>
  </xsl:template>
</xsl:stylesheet>

produces the wanted result:

<keyResults>
  <attributeType>attA-1</attributeType>
  <attributeType>attA-2</attributeType>
  <attributeType>attB-1</attributeType>
  <attributeType>attB-2</attributeType>
  <attributeType>attC-1</attributeType>
</keyResults>

Cheers,

Dimitre Novatchev.


<Prev in Thread] Current Thread [Next in Thread>