Altova Mailing List Archives>Archive Index >microsoft.public.xsl Archive Home >Recent entries >Thread Prev - Re: round all nodes that contain a decimal to 2 d.p >Thread Next - Re: round all nodes that contain a decimal to 2 d.p Re: round all nodes that contain a decimal to 2 d.pTo: NULL Date: 12/3/2007 8:53:00 PM > <xsl:value-of select= > "concat(floor(.), > '.', > round(concat( > substring(substring-after(.,'.'), 1,2), > '.', > substring(substring-after(.,'.'), 3) > ) > ) > ) > "/> Or even better, just use: round(. * 100) div 100 Cheers, Dimitre Novatchev "Dimitre Novatchev" <dimitren@t...> wrote in message news:4754d3e0$0$47155$892e7fe2@a...... > > "dickster" <grd@r...> wrote in message > news:551c4d8a-a210-4693-af8a-45474cd39217@e...... >>I would like some xslt that would iterate through each node of xml and >> create an exact copy of the xml - except in the case where the node >> contained a decimal where I would like it rounded to 2 places >> >> NB: I don't know the names of nodes with decimals before hand !!! >> >> so >> ------------- >> <root> >> <a> >> <x>123.446</x> >> <y>xxx</y> >> </a> >> <b>12.315</b> >> </root> >> ------------- >> >> Becomes >> >> ------------- >> <root> >> <a> >> <x>123.45</x> >> <y>xxx</y> >> </a> >> <b>12.32</b> >> </root> >> ------------- > > > This transformation (I suppose that all the numbers are positive. If not, > the code will be slightly more complex, but the idea is the same): > > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > <xsl:output omit-xml-declaration="yes" indent="yes"/> > > <xsl:template match="node()|@*"> > <xsl:copy> > <xsl:apply-templates select="node()|@*"/> > </xsl:copy> > </xsl:template> > > <xsl:template match="text()[number(.) = .]"> > <xsl:value-of select= > "concat(floor(.), > '.', > round(concat( > substring(substring-after(.,'.'), 1,2), > '.', > substring(substring-after(.,'.'), 3) > ) > ) > ) > "/> > </xsl:template> > </xsl:stylesheet> > > when applied on the provided xml document" > > <root> > <a> > <x>123.446</x> > <y>xxx</y> > </a> > <b>12.315</b> > </root> > > produces the wanted result: > > <root> > <a> > <x>123.45</x> > <y>xxx</y> > </a> > <b>12.32</b> > </root> > > > Cheers, > Dimitre Novatchev > > > | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
