XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
prasad ramaSubject: Using Key
Author: prasad rama
Date: 23 Jan 2009 01:10 PM
Originally Posted: 23 Jan 2009 12:45 PM
Hi,

I have a problem with xsl:key.

my xml looks like this

<states>
<state name="AP">
<product code="Pen">
<group value="1">
<tier min_custom="1"/>
<tier min_custom="210"/>
<tier min_custom="240"/>
<tier min_custom="1"/>
<tier min_custom="210"/>
<tier min_custom="240"/>
</group>
</product>
<product code="Book">
<group value="1">
<tier min_custom="1"/>
<tier min_custom="210"/>
<tier min_custom="240"/>
<tier min_custom="1"/>
<tier min_custom="210"/>
<tier min_custom="240"/>
</group>
</product>
</state>
<state name="TN">
<product code="Eraser">
<group value="1">
<tier min_custom="1"/>
<tier min_custom="240"/>
<tier min_custom="1"/>
<tier min_custom="240"/>
</group>
</product>
<product code="Scale">
<group value="1">
<tier min_custom="1"/>
</group>
</product>
</state>
</states>

I need to retrieve the distinct min_custom values from each group of each product for each state.

I have the Key like this

<xsl:key name="tierCode" match="tier" use="@min_custom"/>
<xsl:template match="/">
<xsl:for-each select="/states/state[@name='AP']/product[@code='Book']/group[@value='1']">
<xsl:for-each select="//tier[generate-id()=generate-id(key('tierCode',@min_custom)[1])]">
<xsl:value-of select="@min_custom"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>

If I execute the code, the output looks like this..

1
210
240

But If I loop thru the State TN and product Scale

<xsl:key name="tierCode" match="tier" use="@min_custom"/>
<xsl:template match="/">
<xsl:for-each select="/states/state[@name='TN']/product[@code='Scale']/group[@value='1']">
<xsl:for-each select="//tier[generate-id()=generate-id(key('tierCode',@min_custom)[1])]">
<xsl:value-of select="@min_custom"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>

If I execute the code, the output looks like this..

1
210
240

But I need to get the output like this...

1

Please help me to get the values accurately.

Postnext
prasad ramaSubject: Using Key
Author: prasad rama
Date: 23 Jan 2009 01:49 PM
Hi,

I am able to get the result by changing the match field in xsl:key like

<xsl:key name="tierCode" match="/states/state[@name='TN']/product[@code='Scale']/group[@value='1']/tier" use="@min_custom"/>

Even though I have problem here. In the above key I hardcoded the state name,product code and group value.

Is there any chance of passing those values dynamically by using variables or params?

Posttop
prasad ramaSubject: Using Key
Author: prasad rama
Date: 27 Jan 2009 02:17 PM
Hi,

I got the solution for this problem.

<xsl:key name="tierCode" match="/states/state[@name='TN']/product[@code='Scale']/group[@value='1']/tier" use="@min_custom"/>

Instead of declaring the key like this, I did declared

<xsl:key name="tierCode" match="/states/state/product/group/tier" use="concat(../../../../@name,../../../@code,../@value,@min_custom)"/>

Used the key like this...

<xsl:for-each select="//tier[generate-id()=generate-id(key('tierCode',concat($Name,$Product,'1',@min_custom))[1])]">

So that we can change the StateName,ProductCode and Value dynamically.

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.