problems with apply-templates

Discussion in 'XML' started by bjam, Mar 1, 2005.

  1. bjam

    bjam Guest

    Help! The apply-templates function is not currently allowing me to
    select a specific template... eventhough I tried putting a select
    statement, it does not seem to work??? Can someone help show how I can
    select the first template and then have it select others? Below is a
    sample of the xml as well as the .xsl file when
    I do something like the following in the main section it does not seem
    to work, it only works when I remove the select statement, and even
    then it seems to only be using the first template... any help is
    greatly appreciated...

    <xsl:apply-templates select="hashref/item[starts-with(@key,'TEST_')]"
    />



    XSL file
    --------------


    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
    <html>
    <basefont face="Verdana" size="2" />
    <body>
    <xsl:apply-templates />
    </body>
    </html>
    </xsl:template>

    <xsl:key name="key-search" match="item" use="@key" />

    <xsl:template match="hashref/item[starts-with(@key,'TEST_')]">
    <table border="0" bgcolor="gray">
    <tr>
    <th colspan="2" bgcolor="navy"><font color="white"><xsl:value-of
    select="@key"/></font></th>
    </tr>
    <!-- output all text/control tag items -->
    <xsl:for-each select="hashref/item">
    <xsl:if test="text()">
    <tr>
    <th align="left"><xsl:value-of select="@key"/></th>
    <td><font face="verdana" size="2" color="white"><xsl:value-of
    select="text()"/></font></td>
    </tr>
    </xsl:if>
    </xsl:for-each>

    <!-- test results -->
    <tr>
    <th align="left">test result</th>
    <xsl:variable name="key_value"
    select="key('key-search','hypothesis_test_results')"/>
    <xsl:choose>
    <xsl:when test="$key_value = 'false'">
    <td><font face="verdana" size="2" color="red"><xsl:value-of
    select="."/></font></td>
    </xsl:when>
    <xsl:eek:therwise>
    <td><font face="verdana" size="2" color="white"><xsl:value-of
    select="."/></font></td>
    </xsl:eek:therwise>
    </xsl:choose>
    </tr>

    <xsl:apply-templates select="item[@key='hypothesis_test_results']"/>

    </table>
    <!-- for spacing purposes between tests -->
    <table border="0"><tr><td></td></tr><tr><td></td></tr></table>
    </xsl:template>

    <xsl:template match="item[@key='hypothesis_test_results']">
    <tr>
    <td><font face="verdana" size="2" color="red"><xsl:value-of
    select="test"/></font></td>
    <td><font face="verdana" size="2" color="red"><xsl:value-of
    select="."/></font></td>
    </tr>
    </xsl:template>

    <!--
    <xsl:apply-templates select = 'item'/>

    <xsl:template match="/item[@key='hypothesis_result']" >
    <tr>
    <th align="left"><xsl:value-of select="@key"/></th>
    <td><font face="verdana" size="2" color="blue"><xsl:value-of
    select="."/></font></td>
    </tr>
    </xsl:template>
    -->

    </xsl:stylesheet>


    XML file
    --------------

    <item key="TEST_5">
    <hashref memory_address="0x943c6f4">
    <item key="AccountID">58279</item>
    <item key="ScheduleID">7</item>
    <item key="ShortName">RBCNUK-0855-CEFL</item>
    <item key="hypothesis_results">
    <arrayref memory_address="0x943809c">
    <item key="0">
    <arrayref memory_address="0x943778c">
    <item key="0">
    <arrayref memory_address="0x9437744">
    <item key="0">4166</item>
    </arrayref>
    </item>
    </arrayref>
    </item>
    </arrayref>
    </item>
    <item key="hypothesis_test_results">
    <hashref memory_address="0x943c6ac">
    <item key="result">true</item>
    </hashref>
    </item>
    <item key="sample_results">
    <arrayref memory_address="0x943259c">
    <item key="0">
    <arrayref memory_address="0x9432614">
    <item key="0">
    <arrayref memory_address="0x94381bc">
    <item key="0">4160</item>
    </arrayref>
    </item>
    <item key="1">
    <arrayref memory_address="0x943241c">
    <item key="0">4153</item>
    </arrayref>
    </item>
    <item key="2">
    <arrayref memory_address="0x9432638">
    <item key="0">4162</item>
    </arrayref>
    </item>
    <item key="3">
    <arrayref memory_address="0x94380fc">
    <item key="0">4164</item>
    </arrayref>
    </item>
    <item key="4">
    <arrayref memory_address="0x94381b0">
    <item key="0">4163</item>
    </arrayref>
    </item>
    <item key="5">
    <arrayref memory_address="0x94380cc">
    <item key="0">4165</item>
    </arrayref>
    </item>
    <item key="6">
    <arrayref memory_address="0x94381d4">
    <item key="0">4168</item>
    </arrayref>
    </item>
    </arrayref>
    </item>
    </arrayref>
    </item>
    <item key="stats_results">
    <hashref memory_address="0x943376c">
    <item key="MEAN">4162.14285714286</item>
    <item key="STD">4.74090608177306</item>
    <item key="STD_ERROR">1.79189406878359</item>
    <item key="confidence_interval_lower">4151</item>
    <item key="confidence_interval_upper">4173</item>
    <item key="critical_value">5.9565</item>
    <item key="degrees_of_freedom">6</item>
    <item key="distribution">tdistr</item>
    <item key="interval_type">integer</item>
    <item key="level_of_significance">0.000499999999999972</item>
    <item key="sample_size">7</item>
    <item key="type_of_test">two tailed test</item>
    </hashref>
    </item>
    </hashref>
    </item>
    bjam, Mar 1, 2005
    #1
    1. Advertising

  2. <xsl:template match="hashref/item[starts-with(@key,'TEST_')]">

    so here your current node is an item node

    <xsl:apply-templates select="item[@key='hypothesis_test_results']"/>

    so this selects item children (with that attribute) of teh current item
    node, but your sample input didnt have any such children, they seem to
    be grandchildren below a hashref so perhaps you meant to do

    <xsl:apply-templates select="hashref/item[@key='hypothesis_test_results']"/>

    David
    David Carlisle, Mar 1, 2005
    #2
    1. Advertising

  3. Hi, Thanks for the response I will try that. How about when the first
    <xsl:apply-templates\> is called? It seems that I cannot get this to
    just apply the following template specifically... any ideas? I tried
    the following but maybe something is wrong here?

    statement to call template

    <xsl:apply-templates select="hashref/item[starts-with(@key,'TEST_')]">\>

    template to call

    <xsl:template match="hashref/item[starts-with(@key,'TEST_')]">


    *** Sent via Developersdex http://www.developersdex.com ***
    Don't just participate in USENET...get rewarded for it!
    Benjamin Samim, Mar 2, 2005
    #3
  4. Hi, Thanks for the response I will try that. How about when the first
    <xsl:apply-templates\> is called? It seems that I cannot get this to
    just apply the following template specifically... any ideas? I tried
    the following but maybe something is wrong here?


    you used a similar wording in your original message and I didn't
    understand what you meant then or now. I suspect that you have the
    wrong mental model of how xslt is working.
    When you use apply-templates you _never_ specify which templates are to
    be applied (and there is no real notion of a "next" template, the order
    of templates in the stylesheet is not significant). apply-templates uses
    a select expression which selects nodes in the input tree.

    If you want to call a block of code explictly then you want to use a
    named template not a match template and use xsl:call-template rather
    than apply-templates. However that isn't normally what you would want to
    do for this kind of transform.

    David
    David Carlisle, Mar 2, 2005
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Stefan Siegl
    Replies:
    1
    Views:
    951
    Marrow
    Jul 18, 2003
  2. Cyrille \cns\ Szymanski

    xsl apply-templates select=not(...)

    Cyrille \cns\ Szymanski, Nov 7, 2003, in forum: XML
    Replies:
    4
    Views:
    592
    Cyrille \cns\ Szymanski
    Nov 11, 2003
  3. Mike Partridge
    Replies:
    3
    Views:
    483
    Dimitre Novatchev
    Jan 14, 2004
  4. JKop
    Replies:
    3
    Views:
    455
  5. recover
    Replies:
    2
    Views:
    789
    recover
    Jul 25, 2006
Loading...

Share This Page