[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
|