xsl-list
[Top] [All Lists]

RE: Why is apply-templates not called?

2002-12-09 18:59:39
Hey Jeff:

<xsl:apply-templates> always operates on a node list.  The node list by
default are the child nodes of the node matched on the template.
Therefore, if you have an XML like:

<Foo>
   <Bar/>
</Foo>

And you're in a template:

<xsl:template match="Bar">

Then apply-templates will not do anything for this particular source
(Bar has no children).

Probably what you're looking for is:

<xsl:apply-templates select="."/> 

This will take the current node (in this case the nodes you're iterating
through xsl:for-each) and run templates on it.

HTH!

Dion


-----Original Message-----
From: Jeff Lowery [mailto:jlowery(_at_)scenicsoft(_dot_)com] 
Sent: Monday, December 09, 2002 5:36 PM
To: 'xsl-list'
Subject: [xsl] Why is apply-templates not called?

I suspect I'm going to expose a fundamental misunderstanding of how XSLT
works, but here goes...

Using the following script snippet, both <Color> elements are output
correctly:

<xsl:template match="jdf:ColorantControl">
  <ProcessColorMap>
    <xsl:for-each select="jdf:ColorPool/jdf:Color[(@Name='Cyan') or
(@Name='Yellow') or (@Name='Magenta') or (@Name='Black')]">
      <Color
       colorName="{(_at_)Name}"
      >
      </Color>
    </xsl:for-each>
  </ProcessColorMap>
  <SpotColorMap>
    <xsl:for-each select="jdf:ColorPool/jdf:Color[not((@Name='Cyan') or
(@Name='Yellow') or (@Name='Magenta') or (@Name='Black'))]">
      <Color
         colorName="{(_at_)Name}"
      >
      </Color>
    </xsl:for-each>
  </SpotColorMap>
</xsl:template>

This approach works, but contains duplicate XML.  What I'd like to do is
put
this common XML in another template, so I would have:

...
<SpotColorMap>
    <xsl:for-each select="jdf:ColorPool/jdf:Color[not((@Name='Cyan') or
(@Name='Yellow') or (@Name='Magenta') or (@Name='Black'))]">
       <xsl:apply-templates/>
    </xsl:for-each>
  </SpotColorMap>
...

<xsl:template match="jdf:Color">
      <Color
         colorName="{(_at_)Name}"
      >
      </Color>
</xsl:template>


But she no work!

I'm using instant Saxon 6.5.2

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


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



<Prev in Thread] Current Thread [Next in Thread>