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