|
Subject: RE: [xsl] Using key and position() From: Bhupendra Singh <skbhupendra@xxxxxxxxxxx> Date: Tue, 16 Nov 2004 21:07:51 +0000 (GMT) |
Michael,
My problem is something else.
I am not able to access the variable. So I am getting
an undefined value for $p
<xsl:variable name="p" select="key('parentGroups',
generate-id())/@pos" />
I think the problem is with the key/variable
definition, which is giving nothing for $p.
Your suggestion below will be useful only if I get
some value of $p.
But currently the <xsl:value-of select="$p"/> is
printing a blank.
<PRI_HEADER><xsl:value-of select="$p"/>
<xsl:value-of select="$var_27[$p]"/>
</PBU_HEADER>
--- Michael Kay <mike@xxxxxxxxxxxx> wrote:
> position() returns the position of a node in the
> list of nodes that you are
> currently iterating over. So
>
> <xsl:variable name="parentGroup">
> <xsl:for-each select="ParentGroup">
> <parentgroup id="generate-id()"
> pos="position()"/>
> </xsl:for-each>
> </xsl:variable>
>
> will give you values 1,2,3 etc.
>
> You will get what you are looking for by:
>
> <xsl:variable name="parentGroup">
> <xsl:for-each select="*">
> <xsl:if test="self::parentGroup">
> <parentgroup id="generate-id()"
> pos="position()"/>
> </xsl:if>
> </xsl:for-each>
> </xsl:variable>
>
> However, there might be a much easier way of doing
> what you are trying to
> do, if you explained your overall problem rather
> than your approach to
> solving it.
>
> Michael Kay
> http://www.saxonica.com/
>
> > -----Original Message-----
> > From: Bhupendra Singh
> [mailto:skbhupendra@xxxxxxxxxxx]
> > Sent: 16 November 2004 16:13
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: [xsl] Using key and position()
> >
> > Hi,
> > I have an input XML like this:
> >
> > <action>
> > - <ParentGroup> Node1 </ParentGroup>
> > - <ChildGroup> Node1.1 </ChildGroup>
> > - <Child Node1>1.1.1 </Child Node1>
> > - <Child Node2>1.1.2 </Child Node2>
> > - <ParentGroup> Node1 </ParentGroup>
> > - <ChildGroup> Node1.2 </ChildGroup>
> > - <Child Node1>1.2.1 </Child Node1>
> > - <Child Node2>1.2.2 </Child Node2>
> > - <ParentGroup> Node1 </ParentGroup>
> > - <ChildGroup> Node1.3 </ChildGroup>
> > - <Child Node1>1.3.1 </Child Node1>
> > - <Child Node2>1.3.2 </Child Node2>
> > - <ParentGroup> Node1 </ParentGroup>
> > - <ChildGroup> Node1.3 </ChildGroup>
> > - <Child Node1>1.3.x </Child Node1>
> > - <Child Node2>1.3.y </Child Node2>
> >
> > - <ParentGroup> Node2 </ParentGroup>
> > - <ChildGroup> Node2.1 </ChildGroup>
> > - <Child Node1>2.1.1 </Child Node1>
> > - <Child Node2>2.1.2 </Child Node2>
> > - <ParentGroup> Node2 </ParentGroup>
> > - <ChildGroup> Node2.2 </ChildGroup>
> > - <Child Node1>2.2.1 </Child Node1>
> > - <Child Node2>2.2.2 </Child Node2>
> > - <ParentGroup> Node2 </ParentGroup>
> > - <ChildGroup> Node2.3 </ChildGroup>
> > - <Child Node1>2.3.1 </Child Node1>
> > - <Child Node2>2.3.2 </Child Node2>
> > ...........
> > </action>
> >
> > I want to capture the position of each of the
> > <ParentGroup> elements and store it in a variable
> by
> > going through the document only once.
> >
> > <xsl:variable name="parentGroup">
> > <xsl:for-each select="ParentGroup">
> > <parentgroup id="generate-id()"
> pos="position()"/>
> > </xsl:for-each>
> > </xsl:variable>
> >
> >
> > Then I want to use this variable to get the
> position
> > of each <ParentGroup> and find its coresponding
> > <ChildGroup> and <Child Nodes>.
> >
> > When I print the contents of the variable(@id and
> > @pos), then I find that the content is correct,
> but
> > when I try to retreive the content using key then
> I
> > get nothing. Here is the XSL that I have.
> >
> >
> > <?xml version="1.0" ?>
> > <xsl:stylesheet
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> > version="1.0">
> >
> > <!-- Key to group distinct ChildGroup's -->
> > <xsl:key name="SEC_CUST" match="ChildGroup"
> use="."/>
> >
> > <!-- Key to group distinct ParentGroup's -->
> > <xsl:key name="PRI_CUST" match="ParentGroup"
> use="."/>
> >
> > <!-- Key to find position of ParentGroup's -->
> > <xsl:key name="parentGroups" match="parentGroup"
> > use="@id"/>
> >
> > <xsl:template match="/">
> > <xsl:apply-templates/>
> > </xsl:template>
> >
> >
> > <xsl:template match="action">
> > <TRANS_OUTPUT>
> > <CUSTOMERS>
> > <xsl:variable name="var_24" select="Child Node1"
> />
> > <xsl:variable name="var_27" select="Child Node2"
> />
> >
> > <!-- Variable to store the posittion of each
> > ParentGroup nodes -->
> > <xsl:variable name="parentGroup">
> > <xsl:for-each select="ParentGroup">
> > <parentgroup>
> > <xsl:attribute name="id"
> select="generate-id()"/>
> > <xsl:attribute name="pos"
> select="position()"/>
> > </parentgroup>
> > </xsl:for-each>
> > </xsl:variable>
> >
> > <xsl:for-each select="$var_21[count(. |
> > key('PRI_CUST', .)[1]) = 1]">
> > <PRIMARY CUSTOMER>
> > <xsl:variable name="priId" select="." />
> > <xsl:variable name="p"
> > select="key('parentGroups', generate-id())/@pos"
> />
> > <PRI_HEADER><xsl:value-of select="$p"/>
> > <xsl:value-of select="$var_27[$p]"/>
> > </PBU_HEADER>
> > <PRIMARY_CUST_DESC>
> > <xsl:value-of select="$var_24[$p]"/>
> > <xsl:text> </xsl:text>
> > <xsl:value-of select="$priId"/>
> > </PRIMARY_CUST_DESC>
> >
> > <SECONDARY CUSTOMER>
> > <xsl:for-each select= SECONDARY CUSTOMER....
> > ....group &.Do processing for Sec customers
> > </SECONDARY CUSTOMER>
> >
> > </End of for loop for Primary cusotmer>
> > </PRIMARY CUSTOMER>
> > </CUSTOMERS>
> > </TRANS_OUTPUT>
> >
> >
> > In the above XSL..I get the value of $p undefined
> >
> > <xsl:variable name="p" select="key('parentGroups',
> > generate-id())/@pos" />
> >
> > So when I access $var_27[$p] and $var_24[$p] ..I
> get
> > nothing.
> >
> > <PRI_HEADER><xsl:value-of select="$p"/>
> > <xsl:value-of select="$var_27[$p]"/>
> > </PBU_HEADER>
> > <PRIMARY_CUST_DESC>
> > <xsl:value-of select="$var_24[$p]"/>
> > <xsl:text> </xsl:text>
> > <xsl:value-of select="$priId"/>
> > </PRIMARY_CUST_DESC>
> >
> >
> > Can someone please let me know what has gone
> wrong.
> >
> >
> >
> >
> >
> >
>
___________________________________________________________
>
>
=== message truncated ===
=====
regards,
Bhupendra.
________________________________________________________________________
Yahoo! India Matrimony: Find your life partner online
Go to: http://yahoo.shaadi.com/india-matrimony
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] Using key and position(), Michael Kay | Thread | RE: [xsl] Using key and position(), Michael Kay |
| RE: [xsl] Using key and position(), Michael Kay | Date | [xsl] xsl:key grouping problem, Mark Ivs |
| Month |