|
Subject: Re: [xsl] How to prevent copying non-existing elements? From: Michael Ludwig <mlu@xxxxxxxxxxxxx> Date: Tue, 04 Aug 2009 15:16:10 +0200 |
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>| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] How to prevent copying no, Martin Honnen | Thread | Re: [xsl] How to prevent copying no, Florent Georges |
| Re: [xsl] How to prevent copying no, Martin Honnen | Date | Re: [xsl] How to prevent copying no, Florent Georges |
| Month |