xsl-list
[Top] [All Lists]

RE: Complex Template Match

2004-07-22 14:43:29
I have come up with a For-Each solution:

<xsl:template match="ENTRIES_TEMPLATE" mode="PRINTER_FRIENDLY">
        <form action="{$DOC_ACTION}" method="POST">
        <table style="width:{(_at_)width};">
                <!-- build header row -->
        <tr><th>&nbsp;</th>
        <xsl:apply-templates select="Entry[1]/Element"
mode="ENTRY_HEADER"/></tr>

 <!-- [[[[[[ FOR EACH SOLUTION ]]]]]]] -->

        <xsl:for-each select="Entry">
           <xsl:variable name="element_name"><xsl:value-of
select="concat('competitor_name_',position())"/></xsl:variable>
            <xsl:if
test="string($BROWSER_VARS//ELEMENT[(_at_)name=$element_name]/.)">
                <tr>
                          <xsl:apply-templates select="Element" 
mode="PRINTER_FRIENDLY">
                        <xsl:with-param name="position"><xsl:value-of
select="position()"/></xsl:with-param>
                    </xsl:apply-templates>
                  </tr>
            </xsl:if>
        </xsl:for-each>


 <!-- [[[[[[ END FOR EACH SOLUTION ]]]]]]] -->


    </table>
        <input type="hidden" name="ax" value="0"/>
    </form>
</xsl:template>


-----Original Message-----
From: Karl J. Stubsjoen [mailto:karl(_at_)meetscoresonline(_dot_)com]
Sent: Thursday, July 22, 2004 2:12 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Complex Template Match


Hello,

I have a complicated match... and complicated to explain, but I will try.
I pass 2 XML sources to a stylesheet:

BROWSER_VARS
ENTRY_TEMPLATE


ENTRY_TEMPLATE will have 50 nodes that match "ENTRY".
BROWSER_VARS will have 1-50 "ELEMENT" entries.

I "apply-templates" on $ENTRY_TEMPLATE//Entry/Element.  (I could
apply-templates on BROWSER_VARS but there is no way to perform a lookup from
BROWSER_VARS to ENTRY_TEMPLATE).

The lookup "match" I do from and ENTRY element to BROWSER_VARS is a
concatenation of the name element of ENTRY and the position() against the
BROWSER_VARS/ELEMENT name attribute.  It looks like this:


=== TEMPLATE MATCH SNIPPET ===
<xsl:template match="Element">
<xsl:variable name="element_name"><xsl:value-of
select="concat(@name,'_',$position)"/></xsl:variable>

<xsl:value-of select="$BROWSER_VARS//ELEMENT[(_at_)name=$element_name]/."/>


With all of that said, I'd like to change the following "apply-templates"
rule:
        <xsl:apply-templates select="Element"/>

To include only "Element"(s) who have a $BROWSWER_VARS//ELEMENT match.
Is this possible?

Karl


--+------------------------------------------------------------------
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>