xsl-list
[Top] [All Lists]

Problem using Key on multiple elements

2005-08-12 06:20:00
hi,

My source xml looks something like this.

<crew program="EP3297910048">
<member>
<role>Actor</role>
<givenname>Peter</givenname>
<surname>McCauley</surname>
</member>
<member>
<role>Actor</role>
<givenname>Michael</givenname>
<surname>Sinelnikoff</surname>
</member>
<member>
</crew>
<crew program="EP3556823923">
<role>Director</role>
<givenname>Michael</givenname>
<surname>Sinelnikoff</surname>
</member>
<member>
</crew>
<role>Actor</role>
<givenname>Michael</givenname>
<surname>Offer</surname>
</member>
<member>
<role>Executive Producer</role>
<givenname>John</givenname>
<surname>Landis</surname>
</member>
</crew>

Now in my transformed xml there should be only one element for each
person irrespective of the role. for eg in the above piece of xml
there shud b only one element for Michael Sinelnikoff.

So to get unique names i create a key based on givenname and surname as follows

<xsl:key name="roleNames"
match="a:xtvd/a:productionCrew/a:crew/a:member/*"
use="concat(a:givenname,'+',a:surname)"/>

first i tried

<xsl:for-each 
select="a:xtvd/a:productionCrew/a:crew/a:member/a:givenname[generate-id(concat(.,'+',parent::node()/a:surname))=generate-id(key('roleNames',concat(.,'+',parent::node()/a:surname)))]">

but since generate-id expects node-set the abv does not work.

so i create a temp variable as follows.

<xsl:variable name="givenNsurnames">
<rolenames>                                                     <xsl:for-each
select="a:xtvd/a:productionCrew/a:crew/a:member">
                    <xsl:element name="t">
               <xsl:value-of select="concat(a:givenname,'+',a:surname)"/>
            </xsl:element>                                            
</xsl:for-each>
</rolenames>
</xsl:variable>

and try doing

<xsl:for-each 
select="exsl:nodeSet($givenNsurnames)/rolenames/t[generate-id()=generate-id(key('roleNames',.))]">

<xsl:element name="n">
   <xsl:attribute name="id"><xsl:value-of
select="generate-id()"/></xsl:attribute>
   <xsl:value-of select="."/>
</xsl:element>

</xsl:for-each>

but the control comes out of for-each. Some how id generated do not
match. Where am i going wrong?
iam new to XML/XSLT...Is there any other work arround or a simpler way
to achieve this?

thnx,
Sreenath.

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>