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(_dot_)souto(_at_)star-group(_dot_)net]
Sent: 25 August 2009 10:11
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] 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></Title></it>
<bpt i="1" type="struct"><Elt type='Groupbox'
id='242' coor='0,0,412,112' style='50020007,0'
class='#FF#0080'></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></Title></it>
<bpt i="1" type="struct"><Elt type='Groupbox'
id='242' coor='0,0,412,112' style='50020007,0'
class='#FF#0080'></bpt>
</seg>
</tuv>
<tuv xml:lang="es-es" changedate="20090824T155642Z"
changeid="Transit">
<seg>
<it></Title></it>
<bpt i="1" type="struct"><Elt type='Groupbox'
id='242' coor='0,0,412,112' style='50020007,0'
class='#FF#0080'></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>
--~------------------------------------------------------------------
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>
--~--
--~------------------------------------------------------------------
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>
--~--