Ben Stover schrieb:
Lets start with the following simplified piece of XSLT code :
<xsl:template match="/">
....
<moxx:someelement>
<xsl:value-of select="/moxx:aaa/moxx:bbb"/>
</moxx:someelement>
....
So when bbb is an optional element and it does NOT exist in the source
XML then the following chunk is still created in the target XML doc:
<moxx:someelement></moxx:someelement>
How can I prevent the creation of these frame element tags when there
is no source element?
You will want to learn about the difference between *pull* processing
(your pseudocode and Michael Kay's XSLT example and Martin's "verbose
way") and *push* processing (Martin's first suggestion, and my example
below).
Also, you will want to learn about the identity template, which is a
very common and important XSLT pattern, given below.
<xsl:stylesheet version="1.0"
xmlns:moxx="net.moxx"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<moxx:root>
<xsl:apply-templates select="moxx:aaa/moxx:bbb"/>
</moxx:root>
</xsl:template>
<xsl:template match="moxx:bbb"><!-- or moxx:aaa/moxx:bbb
for greater precision in matching -->
<moxx:someelement>
<xsl:apply-templates/>
</moxx:someelement>
</xsl:template>
<xsl:template match="@*|node()"><!-- identity template -->
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
</xsl:stylesheet>
Michael Ludwig
--~------------------------------------------------------------------
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>
--~--