|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Keys
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.
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








