xsl-list
[Top] [All Lists]

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

2009-08-04 09:04:59
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/

--~------------------------------------------------------------------
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>
--~--