Re: [xsl] How to prevent copying non-existing elements?

Subject: Re: [xsl] How to prevent copying non-existing elements?
From: Martin Honnen <Martin.Honnen@xxxxxx>
Date: Tue, 04 Aug 2009 15:03:34 +0200
Ben Stover wrote:
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?

In pseudo code I need something like

<xsl:template match="/">
   ....
  "if /moxx:aaa/moxx:bbb exists" then (
  <moxx:someelement>
      <xsl:value-of select="/moxx:aaa/moxx:bbb"/>
  </moxx:someelement>)
  ....

How can I code this in XSLT ?

If you have


  <xsl:template match="moxx:aaa/moxx:bbb">
    <moxx:someelement>
      <xsl:value-of select="."/>
    </<moxx:someelement>>
  </xsl:template>

and make sure that elements are processed (which for instance the built-in templates will do) then you have achieved what you want.

Obviously the verbose way
  <xsl:if test="/moxx:aaa/moxx:bbb">
    <moxx:someelement>
      <xsl:value-of select="/moxx:aaa/moxx:bbb"/>
    </<moxx:someelement>
  </xsl:if>
is also possible.

--

	Martin Honnen
	http://msmvps.com/blogs/martin_honnen/

Current Thread