|
Subject: Re: [xsl] Keys From: Dimtre Novatchev <dnovatchev@xxxxxxxxx> Date: Thu, 9 Sep 2004 22:37:41 +1000 |
Sorry, the source xml in the example should read:
<root>
<a>
<xml>
<Schema>
<ElementType>
<attributeType>attA-1</attributeType>
</ElementType>
</Schema>
</xml>
</a>
<b>
<xml>
<Schema>
<ElementType>
<attributeType>attB-1</attributeType>
</ElementType>
</Schema>
</xml>
</b>
<c>
<xml>
<Schema>
<ElementType>
<attributeType>attC-1</attributeType>
</ElementType>
</Schema>
</xml>
</c>
<b>
<xml>
<Schema>
<ElementType>
<attributeType>attB-2</attributeType>
</ElementType>
</Schema>
</xml>
</b>
<a>
<xml>
<Schema>
<ElementType>
<attributeType>attA-2</attributeType>
</ElementType>
</Schema>
</xml>
</a>
</root>
On Thu, 9 Sep 2004 21:21:49 +1000, Dimtre Novatchev
<dnovatchev@xxxxxxxxx> wrote:
> On Wed, 8 Sep 2004 22:43:07 -0700, Karl J. Stubsjoen
> <karl@xxxxxxxxxxxxxxxxxxxx> wrote:
> > How do you manage this sort of key:
> > <xsl:key name="attType"
> > match="/root/*/xml/s:Schema/s:ElementType/s:AttributeType"
> > use="/root/*[@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.
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Keys, Dimtre Novatchev | Thread | RE: [xsl] Keys, Jarno.Elovirta |
| [xsl] Xalan pronunciation, Andrew Welch | Date | Re: [xsl] Xalan pronunciation, Gammoudi |
| Month |