Subject: RE: [xsl] generate an element only if the result is not empty From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Tue, 25 Aug 2009 10:56:52 +0100 |
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: [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>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] generate an element only , David Carlisle | Thread | RE: [xsl] Zipping xsl:result-docume, Michael Kay |
Re: [xsl] generate an element only , David Carlisle | Date | RE: [xsl] URIResover question, Michael Kay |
Month |