[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Node Position() always equals 1

Subject: Node Position() always equals 1
From: Cynthia DeLaria <cdelaria@xxxxxxxxxxxxx>
Date: Tue, 1 Feb 2005 09:43:32 -0700 (GMT-07:00)
xsl if equals
Good day, all! :)

The complete XML and XSL are at the bottom of this email. The problem that I'm having is that for some reason the spec_off/offer nodes are always returning position() = 1... Which means that my numbering is always off because I'm basing the numbering on position() + 1... Can anyone explain this?

I tried the transform on three different parsing engines just to make sure that I wasn't crazy (which may still be true)... Any help is greatly appreciated...

Thanks!

Cynthia

XML:

<?xml version="1.0" encoding="UTF-8" ?>
<template>
    <versions>
                <version id="CO" gis="true">
                    <name>Corporate</name>
                    <url>http://REPLACE</url>
                    <sLine>Corporate Subject Line</sLine>
                </version>
                <version id="FR" gis="">
                    <name>Franchise</name>
                    <url></url>
                    <sLine>Franchise Subject Line</sLine>
                </version>
    </versions>
<welcome_msg>
    <smi>Welcome to your premiere edition of <i>What's New@BLOCKBUSTER<regTrade /></i>! You'll love our unique mix of the hottest new releases and special offers.<br /><br /><i>What's New@BLOCKBUSTER</i> is full of great entertainment options to help you get more from your BLOCKBUSTER<regTrade /> membership.</smi>
    <rp>Welcome back to <i>What's New@BLOCKBUSTER<regTrade /></i>. Your e-mail address has been updated through the e-mail change of address process you registered for with ReturnPath. We're glad you're receiving <i>What's New@BLOCKBUSTER</i> again!</rp>
</welcome_msg>
<spec_off>
    <offer CO='true' FR='' no_move="false">
        <toc_item name="Promo 1 CO" href="promo1" specOff="true" CO="true" FR="" no_move="false" />
        <title>Promo 1 CO</title>
        <copy>Copy for promo 1 for CO.<br /><br />Copy of second paragraph.</copy>
        <img imgW="0" imgH="0" href="" align="right" vspace="" hspace="">http://a948.g.akamai.net/f/948/166/1h/blockbuster.qrs1.net/ME/images/</img> 
        <alt></alt>
        <terms show="true">
            <href value="http://REPLACE">Click here</href> for terms &amp; conditions.
        </terms>
        <more show="false">
            <href value="">Click here</href> for more information.
        </more>
        <legal>Legal for promo 1 for CO.</legal>
    </offer>
    <offer CO='true' FR='' no_move="false">
        <toc_item name="Promo 2 CO" href="promo2" specOff="true" CO="true" FR="" no_move="false" />
        <title>Promo 2 CO</title>
        <copy>Copy for Promo 2 for CO.</copy>
        <img imgW="0" imgH="0" href="" align="right" vspace="" hspace="">http://a948.g.akamai.net/f/948/166/1h/blockbuster.qrs1.net/ME/images/</img> 
        <alt></alt>
        <terms show="true">
            <href value="http://REPLACE">Click here</href> for terms &amp; conditions.
        </terms>
        <more show="false">
            <href value="">Click here</href> for more information.
        </more>
        <legal>Legal for Promo 2 for CO.</legal>
    </offer>
    <offer CO='' FR='true' no_move="true">
        <toc_item name="Promo 1 FR" href="promo3" specOff="true" CO="" FR="true" no_move="true" />
        <title>Promo 1 FR</title>
        <copy>Copy for promo 1 for FR.</copy>
        <img imgW="0" imgH="0" href="" align="right" vspace="" hspace="">http://a948.g.akamai.net/f/948/166/1h/blockbuster.qrs1.net/ME/images/</img> 
        <alt></alt>
        <terms show="false">
            <href value="">Click here</href> for terms &amp; conditions.
        </terms>
        <more show="false">
            <href value="">Click here</href> for more information.
        </more>
        <legal></legal>
    </offer>
    <offer CO='true' FR='' no_move="false">
        <toc_item name="Promo 3 CO" href="promo4" specOff="true" CO="true" FR="" no_move="false" />
        <title>Promo 3 Co</title>
        <copy>Copy for Promo 3 for CO.</copy>
        <img imgW="0" imgH="0" href="" align="right" vspace="" hspace="">http://a948.g.akamai.net/f/948/166/1h/blockbuster.qrs1.net/ME/images/</img> 
        <alt></alt>
        <terms show="false">
            <href value="">Click here</href> for terms &amp; conditions.
        </terms>
        <more show="false">
            <href value="">Click here</href> for more information.
        </more>
        <legal></legal>
    </offer>
</spec_off>
</template>

XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="version">CO</xsl:variable>
<xsl:variable name="welcome_msg">none</xsl:variable>
<xsl:variable name="count"><xsl:value-of select="count(template/spec_off/offer[./@*[local-name()=$version]='true'])" /></xsl:variable>
<xsl:variable name="maxLength" select="72" />
<xsl:variable name="lower">abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:variable name="upper">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
 <xsl:output method="html" indent="no" encoding="UTF-8" />
<xsl:template match="/">
<font size="2" face="courier">
<xsl:if test="template/spec_off/offer">
<xsl:choose>
    <xsl:when test="$welcome_msg != 'none' and template/welcome_msg/node()[name(.) = $welcome_msg] != ''">
        <xsl:apply-templates select="template/spec_off/offer[./@*[local-name()=$version]='true']" />
    </xsl:when>
    <xsl:otherwise>
        <xsl:if test="$count > 1">
            <xsl:apply-templates select="template/spec_off/offer[./@*[local-name()=$version]='true'][position() &gt; 1]" />
        </xsl:if>
    </xsl:otherwise>
</xsl:choose>
</xsl:if>
</font>
</xsl:template>
<xsl:template match="offer">
    <xsl:for-each select=".">
<xsl:if test="./@no_move != 'true'">
----------------------------------------------------------------------<br />
<xsl:call-template name="breakLength"><xsl:with-param name="copy"><xsl:value-of select="position()+1" />. <xsl:apply-templates select="./title" /></xsl:with-param><xsl:with-param name="maxLength" select="$maxLength" /></xsl:call-template>
<br />
<xsl:call-template name="breakLength">
<xsl:with-param name="copy"><xsl:apply-templates select="./copy" /></xsl:with-param>
<xsl:with-param name="maxLength" select="$maxLength" />
</xsl:call-template>
<br />
<xsl:if test="./more/@show='true'">
<xsl:call-template name="replaceHere"><xsl:with-param name="toReplace"><xsl:copy-of select="./more" /></xsl:with-param></xsl:call-template>
<br />
<xsl:value-of select="./more/href/@value" /><br />
</xsl:if>
<xsl:if test="./terms/@show = 'true'">
<xsl:call-template name="replaceHere"><xsl:with-param name="toReplace"><xsl:copy-of select="./terms" /></xsl:with-param></xsl:call-template>
<br />
<xsl:value-of select="./terms/href/@value" /><br />
</xsl:if>
<xsl:if test="./terms/@show='true' or ./more/@show='true'"><br /></xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template name="breakLength">
<xsl:param name="maxLength" />
<xsl:param name="copy" />
<xsl:param name="current" />
<xsl:choose>
<xsl:when test="$copy">
<xsl:variable name="nextWord">
<xsl:choose>
<xsl:when test="contains($copy,' ')">
<xsl:value-of select="substring-before($copy,' ')" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$copy" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:when test="string-length($current)+1+string-length($nextWord) &lt; $maxLength">
<xsl:call-template name="breakLength">
<xsl:with-param name="maxLength" select="$maxLength" />
<xsl:with-param name="copy" select="substring-after($copy,' ')" />
<xsl:with-param name="current">
<xsl:choose>
<xsl:when test="$current!=''"><xsl:value-of select="concat($current,' ',$nextWord)" /></xsl:when>
<xsl:otherwise><xsl:value-of select="$nextWord" /></xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$current" />
<br />
<xsl:call-template name="breakLength">
<xsl:with-param name="maxLength" select="$maxLength" />
<xsl:with-param name="copy" select="$copy" />
<xsl:with-param name="current" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$current" />
<br />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="replaceHere">
<xsl:param name="toReplace" />
<xsl:copy-of select="substring-before($toReplace,'here')" />below<xsl:copy-of select="substring-after($toReplace,'here')" />
</xsl:template>
</xsl:stylesheet>


PS - I included several extra templates so that you could see all transformations that are happening in case I've done something else wrong. Also, if you want to change the variables to see different output, "version" will be either "CO" or "FR" and "welcome_msg" will be either "none", "smi" or "rp". Thanks!

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.