[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: key with restricting the scope of use attribute

Subject: Re: key with restricting the scope of use attribute
From: Dan Diebolt <dandiebolt@xxxxxxxxx>
Date: Thu, 10 May 2001 16:35:47 -0700 (PDT)
xsl key 1 1
Perhaps I need to clarify my own question with some example XML.
It is a gross simplification, but assume this is my XML:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="SingleKeyForSeveralContexts.xsl"?>

<root>
   <a>       <b id="1"  x="1" y="1"/> 
             <b id="2"  x="1" y="2"/> 
             <b id="3"  x="2" y="2"/> 
             <b id="4"  x="1" y="1"/> </a>
   <a><a>    <b id="5"  x="1" y="2"/> 
             <b id="6"  x="1" y="1"/> </a></a>
   <a><a><a> <b id="7"  x="1" y="1"/> </a></a></a>

   <c>       <b id="8"  x="1" y="1"/> </c>
   <c><a>    <b id="9"  x="1" y="1"/> 
             <b id="10" x="2" y="1"/> 
             <b id="11" x="2" y="1"/> 
             <b id="12" x="1" y="2"/> </a></c>
   <c><a><a> <b id="13" x="2" y="1"/> </a></a></c>

   <d>       <b id="14" x="1" y="1"/> 
             <b id="15" x="1" y="1"/> </d>
   <d><a>    <b id="16" x="1" y="2"/> 
             <b id="17" x="1" y="1"/> </a></d>
   <d><a><a> <b id="18" x="1" y="1"/> 
             <b id="19" x="1" y="2"/>
             <b id="20" x="1" y="2"/>
             <b id="21" x="1" y="1"/></a></a></d>
</root>

I need to 'visit' every "//a/b" node and evaluate a key in the
context of this node. At each node visited, I need to look for
a complex value which for this problem I will represent as
use="concat(@x,':',@y)". However, I want to restrict the nodes
returned by key() to those matching the current node, namely
what is currently matched by "//a/b". What I am asking the list
is how you would approach this problem and what alternatives
there might be to implement it. What I came up with is shown
below and relies upon concatenating a generate-id() into the
use attribute as follows:

  <xsl:key name="MyKey" match="a/b" 
    use="concat(generate-id(),':',@x,':',@y)"/>
 
Is there another way to accomplish the same result?

Regards,

Dan
----------------------------------------------------

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:key name="MyKey" match="a/b" 
  use="concat(generate-id(),':',@x,':',@y)"/>
 <xsl:template match="/">
  <xsl:apply-templates select="//a/b"/>
 </xsl:template>
 <xsl:template match="a/b">
  <!-- complex code that results in $xyCombo -->
  <xsl:variable name="xyCombo" select="'1:1'"/>
  <xsl:value-of select="@id"/>:
  <xsl:for-each select="key('MyKey',concat(generate-id(),':',$xyCombo))">
   @xyCombo=<xsl:value-of select="$xyCombo"/>
  </xsl:for-each>   
  <br/>
 </xsl:template>
</xsl:stylesheet>

Output correctly identifying "1:1" b nodes 
1: @xyCombo=1:1
2: 
3: 
4: @xyCombo=1:1
5: 
6: @xyCombo=1:1
7: @xyCombo=1:1
9: @xyCombo=1:1
10: 
11: 
12: 
13: 
16: 
17: @xyCombo=1:1
18: @xyCombo=1:1
19: 
20: 
21: @xyCombo=1:1


__________________________________________________
Do You Yahoo!?
Yahoo! Auctions - buy the things you want at great prices
http://auctions.yahoo.com/

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.