Sign In | Register Now About Bytes | Help | Site Map
Connecting Tech Pros Worldwide

Unable to update variable

Question posted by: Kevin (Guest) on June 27th, 2008 07:07 PM
I am having difficulty updating a variable page-time-stamp in the
following snippit. The variable time-stamp is initialized from the
attribute time-stamp from the log element. Some of the page elements
(children of log) in my XML source have a time-stamp attribute, so I
want to use the time-stamp from the page for the page-time-stamp
value. I use an xsl:choose/xsl:when/xsl:otherwise combination to setup
an if/else statement to select the page-time-stamp value. When I run
this template, the page-time-stamp value never changes. I only
displays the initial time-stamp value from the log element. Can anyone
help me?

Kevin

<xsl:template match="log">

<xsl:variable name="application-name" select="@application-name"/>
<xsl:variable name="application-version" select="@application-
version"/>
<xsl:variable name="time-stamp" select="@time-stamp"/>

<xsl:variable name="application-string">
<xsl:value-of select="$application-name"/><xsl:textv</
xsl:text><xsl:value-of select="$application-version"/>
</xsl:variable>

<fo:root>

<fo:layout-master-set>
<fo:simple-page-master master-name="standard-page" page-
height="8.5in" page-width="11.0in" margin-top="0.5in" margin-
bottom="0.5in" margin-left="0.5in" margin-right="0.5in">
<fo:region-body region-name="xsl-region-body" margin-top="0.25in"/
Quote:
>

<fo:region-before region-name="xsl-region-before" extent="0.25in"/
Quote:
>

</fo:simple-page-master>
</fo:layout-master-set>

<xsl:for-each select="page">

<xsl:variable name="page-number" select="position()"/>

<xsl:choose>
<xsl:when test="@time-stamp">
<xsl:variable name="page-time-stamp" select="@time-stamp"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="page-time-stamp" select="$time-stamp"/>
</xsl:otherwise>
</xsl:choose>

<fo:page-sequence master-reference="standard-page">

<xsl:if test="$page-number &gt; 1">
<fo:static-content flow-name="xsl-region-before">
<fo:table font-family="Helvetica, sans-serif" font-
size="8pt" inline-progression-dimension="100%" table-layout="fixed">
<fo:table-body>
<fo:table-row>
<fo:table-cell text-align="left">
<fo:block><xsl:value-of
select="$application-string"/></fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block><xsl:value-of select="$page-
time-stamp"/></fo:block>
</fo:table-cell>
<fo:table-cell text-align="right">
<fo:block>Page <xsl:value-of
select="$page-number"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:static-content>
</xsl:if>
Kevin's Avatar
Kevin
Guest
n/a Posts
June 27th, 2008
07:07 PM
#2

Re: Unable to update variable
On Jun 3, 11:35 am, Kevin <Kevin.S.Par...@alumni.utexas.netwrote:
Quote:
I am having difficulty updating a variable page-time-stamp in the
following snippit. The variable time-stamp is initialized from the
attribute time-stamp from the log element. Some of the page elements
(children of log) in my XML source have a time-stamp attribute, so I
want to use the time-stamp from the page for the page-time-stamp
value. I use an xsl:choose/xsl:when/xsl:otherwise combination to setup
an if/else statement to select the page-time-stamp value. When I run
this template, the page-time-stamp value never changes. I only
displays the initial time-stamp value from the log element. Can anyone
help me?
>
Kevin
>
<xsl:template match="log">
>
<xsl:variable name="application-name" select="@application-name"/>
<xsl:variable name="application-version" select="@application-
version"/>
<xsl:variable name="time-stamp" select="@time-stamp"/>
>
<xsl:variable name="application-string">
<xsl:value-of select="$application-name"/><xsl:textv</
xsl:text><xsl:value-of select="$application-version"/>
</xsl:variable>
>
<fo:root>
>
<fo:layout-master-set>
<fo:simple-page-master master-name="standard-page" page-
height="8.5in" page-width="11.0in" margin-top="0.5in" margin-
bottom="0.5in" margin-left="0.5in" margin-right="0.5in">
<fo:region-body region-name="xsl-region-body" margin-top="0.25in"/
>
<fo:region-before region-name="xsl-region-before" extent="0.25in"/
>
</fo:simple-page-master>
</fo:layout-master-set>
>
<xsl:for-each select="page">
>
<xsl:variable name="page-number" select="position()"/>
>
<xsl:choose>
<xsl:when test="@time-stamp">
<xsl:variable name="page-time-stamp" select="@time-stamp"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="page-time-stamp" select="$time-stamp"/>
</xsl:otherwise>
</xsl:choose>
>
<fo:page-sequence master-reference="standard-page">
>
<xsl:if test="$page-number &gt; 1">
<fo:static-content flow-name="xsl-region-before">
<fo:table font-family="Helvetica, sans-serif" font-
size="8pt" inline-progression-dimension="100%" table-layout="fixed">
<fo:table-body>
<fo:table-row>
<fo:table-cell text-align="left">
<fo:block><xsl:value-of
select="$application-string"/></fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block><xsl:value-of select="$page-
time-stamp"/></fo:block>
</fo:table-cell>
<fo:table-cell text-align="right">
<fo:block>Page <xsl:value-of
select="$page-number"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:static-content>
</xsl:if>


I figured it out. I needed to restructure the variable definition of
page-time-stamp.


<xsl:variable name="page-time-stamp">
<xsl:choose>
<xsl:when test="@time-stamp">
<xsl:value-of select="@time-stamp"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$time-stamp"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>

Joseph J. Kesselman's Avatar
Joseph J. Kesselman
Guest
n/a Posts
June 27th, 2008
07:07 PM
#3

Re: Unable to update variable
Kevin wrote:
Quote:
I figured it out. I needed to restructure the variable definition of
page-time-stamp.


Exactly. XSLT variables are single-assignment and their scope is limited
to the descendants of their parent element. To use conditionals when
setting a variable, you have to make the value conditional, not the
assignment.

 
Not the answer you were looking for? Post your question . . .
190,079 Experts ready to help you find a solution.
Sign up for a free account, or Login (if you're already a member).

Latest Articles: Read & Comment
  • Didn't find the answer you were looking for?
    Post Your Question
  • Top Community Contributors