[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: generate an element only if the result is not empt

Subject: RE: generate an element only if the result is not empty
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 25 Aug 2009 10:56:52 +0100
RE:  generate an element only if the result is not empt
The whitespace in your output is a copy of the inter-element whitespace from
your input, so your simplest solution is to remove it from the input using

<xsl:strip-space elements="seg"/>

The alternative would be to do something like

<xsl:apply-templates select="text()[normalize-space()]"/>

Regards,

Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay  

> -----Original Message-----
> From: Manuel Souto Pico [mailto:manuel.souto@xxxxxxxxxxxxxx] 
> Sent: 25 August 2009 10:11
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject:  generate an element only if the result is not empty
> 
> Hello!
> 
> Again I have a doubt with generating empty elements. Here by 
> empty I mean that the element only contains whitespace 
> (\s|\t|\r|\n). I hope you can provide some help.
> 
> I use this spreadsheet
> view-source:http://xtek-solutions.net/burgundyridge/Viz/XML_TM
> /XLF_XLIFF_schemas/TMXtoTBX.xsl 
> 
> 
> to turn omething like this
>    
>     <tu>
>         <tuv xml:lang="es-es" changedate="20090824T155642Z" 
> changeid="Transit">
>             <seg>
>                 <it>&lt;/Title&gt;</it>
>                 <bpt i="1" type="struct">&lt;Elt type='Groupbox' 
> id='242' coor='0,0,412,112' style='50020007,0' 
> class='#FF#0080'&gt;</bpt>
>             </seg>
>         </tuv>
>     </tu>
> 
> into
> 
>     <termEntry>
>         <langSet xml:lang="es-es">
>             <ntig>
>                 <termGrp>
>                     <term>
>                    
>                     </term>
>                 </termGrp>
>             </ntig>
>         </langSet>
>     </termEntry>
> 
> The template (using select="node()" and not select=".")
> 
>     <xsl:template match="seg">
>         <term>
>             <xsl:value-of select="node()" />
>         </term>
>     </xsl:template>
> </xsl:stylesheet>
> 
> is well suited for the data that I have, as the output <term> element 
> will only have content when the source element <seg> has text 
> only (e.g. 
> <seg>text</seg>), which is what I want, that is, I wouldn't want a 
> <term> element with the content of the <seg> element you can 
> see above 
> (<it>, <bpt>, etc.). However a drawback of it is that empty 
> elements are 
> generated. In the example I provide above I would like to avoid 
> generating the whole <termEntry> element if the <term> is 
> only going to 
> contain whitespace.
> 
> I've tried using strip-space, but that affects the source, not the 
> output. I've also found a template called copy-unless-empty 
> (http://www.dpawson.co.uk/xsl/sect2/N3328.html#d4887e64), 
> which is what 
> I need, I guess, but I don't know how to use it (I've tried but...).
> 
> If you could understand what I need ;) and you know how to 
> help, could 
> you drop a line?
> 
> I'm using Saxon6.5.5 with XPath 1.0 in <oXygen/> XML editor.
> 
> Thank you so much in advance for your help!
> 
> Cheers, Manuel
> 
> The whole sample files:
> 
> ___SOURCE DATA___
> 
> <?xml version="1.0" encoding="UTF-8" ?>               
> <!DOCTYPE tmx SYSTEM "tmx14.dtd">    
> <!-- Transit TMX document -->
> <tmx version="1.4">
>     <header creationtool="Transit NXT" creationtoolversion="4.0" 
> datatype="Transit" segtype="block" adminlang="en" srclang="en-us" 
> o-tmf="Transit" creationdate="20090824T155634Z" creationid="MS9" 
> o-encoding="Unicode">
>         <prop type="Project" />
>     </header>
>     <body>
>         <tu>
>             <prop 
> type="FileFormatGUID">{1F8A6315-CDF7-4164-BE09-C4821791D320}</prop>
>             <prop type="Filename">DicAdmin_ENG</prop>
>             <tuv xml:lang="en-us" changedate="20090812T170437Z" 
> changeid="Transit">
>                 <seg>Data record structure</seg>
>             </tuv>
>             <tuv xml:lang="es-es" changedate="20090505T095118Z" 
> changeid="CV2" creationdate="20090416T102716Z" creationid="MS9">
>                 <seg>Estructura del registro de datos</seg>
>             </tuv>
>         </tu>
>         <tu>
>             <prop 
> type="FileFormatGUID">{1F8A6315-CDF7-4164-BE09-C4821791D320}</prop>
>             <prop type="Filename">DicAdmin_ENG</prop>
>             <tuv xml:lang="en-us" changedate="20090824T155641Z" 
> changeid="Transit">
>                 <seg>
>                     <it>&lt;/Title&gt;</it>
>                     <bpt i="1" type="struct">&lt;Elt type='Groupbox' 
> id='242' coor='0,0,412,112' style='50020007,0' 
> class='#FF#0080'&gt;</bpt>
>                 </seg>
>             </tuv>
>             <tuv xml:lang="es-es" changedate="20090824T155642Z" 
> changeid="Transit">
>                 <seg>
>                     <it>&lt;/Title&gt;</it>
>                     <bpt i="1" type="struct">&lt;Elt type='Groupbox' 
> id='242' coor='0,0,412,112' style='50020007,0' 
> class='#FF#0080'&gt;</bpt>
>                 </seg>
>             </tuv>
>         </tu>
>     </body>
> </tmx>
> 
> 
> ___OUTPUT___
> 
> <?xml version="1.0" encoding="UTF-8"?>
> 
> <!DOCTYPE martif
>   PUBLIC "ISO 12200:1999A//DTD MARTIF core (DXFcdV04)//EN" 
> "TBXcdv04.dtd">
> <martif xml:lang="" type="TBX">
>    <martifHeader>
>       <fileDesc>
>          <sourceDesc>
>             <p>Generated with TMX2TBX4TermStarNXT_noDupl.xsl</p>
>          </sourceDesc>
>       </fileDesc>
>       <encodingDesc>
>          <p type="DCSName"/>
>       </encodingDesc>
>    </martifHeader>
>    <text>
>       <body>
>    
>        
>    
>    
>        
>          <termEntry id="">
>             <langSet xml:lang="en-us">
>                <ntig>
>                   <termGrp>
>                      <term>Data record structure</term>
>                   </termGrp>
>                </ntig>
>             </langSet>
>             <langSet xml:lang="es-es">
>                <ntig>
>                   <termGrp>
>                      <term>Estructura del registro de datos</term>
>                   </termGrp>
>                </ntig>
>             </langSet>
>          </termEntry>
>        
>          <termEntry id="">
>             <langSet xml:lang="en-us">
>                <ntig>
>                   <termGrp>
>                      <term>
>                    
>                      </term>
>                   </termGrp>
>                </ntig>
>             </langSet>
>             <langSet xml:lang="es-es">
>                <ntig>
>                   <termGrp>
>                      <term>
>                    
>                      </term>
>                   </termGrp>
>                </ntig>
>             </langSet>
>          </termEntry>
>    
> 
>       </body>
>    </text>
> </martif>

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.