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 |