xsl-list
[Top] [All Lists]

generating id by calling template but how to use it at other places

2003-02-05 21:14:33
Hello people, 

Please ignore the previous email this email contains
proper question without any typos

two unique problems:

My XML is
<publication pubid="0002">
<author>steve lawer</author>
........
<publication>


I want my new XML as:
<publication pubid="0002">
........
</publication>
<person perid="100000004"> <!-- new id generation -->
<personname>steve lawer</personname>
</person>
<pubper> <!-- publication-person intersection -->
<pubid>0002</pubid>
<perid>100000004</perid>
</pubper>

My XSL is:
<?xml version="1.0"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
 <xsl:output method="xml" indent="yes"/>

<xsl:template match="publication">

<publication>
<xsl:copy-of select="@*|*[not(self::author or
self::editor)]"/> <!-- this is just to cut the authors
element-->
</publication>

<xsl:if test="author=not(.=preceding::author)"
<!-- this is so that we get unique author names:
Please comment on this #####1-->
        <xsl:apply-templates select="author">
<xsl:with-param name="temppubid" select="@pubid" />
</xsl:apply-templates>
</xsl:if> 
</xsl:template>
   
<xsl:template match="author">
<xsl:param name="temppubid" />
 <person> 
<xsl:attribute name="perid">
 <xsl:call-template name="generate-author-id"> <!--
generating ids ####2-->
</xsl:attribute>
<personname>
<xsl:value-of select="."/>
</personname>
</person>
<pubper>
 <pubid>
       <xsl:value-of select="$temppubid"/>
  </pubid>
   <perid>
         <xsl:value-of select="???????????"/> <!- I
want to print the id at #####2 that I just created for
person element
over here. What should I use is this not
printing....how to print
the value. ####3-->
   </perid>
<persontype>1</persontype>
 </pubper>
</xsl:template>

 

 <xsl:template name="generate-author-id">
  <xsl:variable name="last"
select="number(preceding::author[(_at_)perid][1]/@perid)"/>
  <xsl:variable name="this"
select="count(preceding::author[not(@perid)])+1"/>
  <xsl:variable name="temp"
select="concat('800000000',$last+$this)" />
 <xsl:value-of
select="substring($temp,string-length($temp)-9)" />
<!-- we just want 10-digit IDs -->
<xsl:template>
       
</xsl:stylesheet>




Please comment on ###1, ###3
I want to know what select statement should I use?
I thought using a 

<xsl:variable name="tempperid">
<xsl:call-template name="generate-author-id" />
</xsl:variable>

and use $tempperid everywhere. But this does not work
since the XSL is a decraraltive language and the value
of the variable remains the same.
Thanks in advance
jinx


=====
-----------------------------------------------------------------
Jinesh Varia
Graduate Student, Information Systems
Pennsylvania State University
Email: jinesh(_at_)psu(_dot_)edu
-----------------------------------------------------------------
'Self is the author of its actions.'

__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com

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