ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Scot P. Floess" <sflo...@nc.rr.com>
Subject Re: XSL transformation with Ant: sorting a list
Date Mon, 07 Mar 2016 11:54:33 GMT

So a few things - first you are killing yourself in the way you XSLT is 
written.  Personally, I'd do:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

     <xsl:output method="xml" />

     <xsl:template match="/">
         <Root>
             <xsl:apply-templates select="a">
                 <xsl:sort select="a"/>
             </xsl:apply-templates>
         </Root>
     </xsl:template>

     <xsl:template name="a">
         <result>
             <xsl:attribute name="value">
                 <xsl:value-of select="."/>
             </xsl:attribute>
         </result>
     </xsl:template>
</xsl:stylesheet>

The sort above may be wrong as I didn't test it - but you get the idea.

You are trying to do the work of the templating engine in your XSLT :)

See if this works and holler at me if you still can't get it working from 
Ant...


On Mon, 7 Mar 2016, Al Le wrote:

> Hello,
>
> I'm facing a weird problem (IMHO) which, in short, is:
>
> a node list passed as a parameter to a template can't be sorted.
>
> The problem occurs only if I do the transformation from within Ant (I use Ant 1.8.4).
It does not occur if I perform it via a Java program or in XmlSpy or through http://xsltransform.net.
>
> Here's an example.
>
> The input file (a.xml) is:
>
> <root>
>    <a>BBB</a>
>    <a>AAA</a>
> </root>
>
> The transformation (trans.xml) is:
>
> <xsl:stylesheet version="1.0"
>  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>
>  <xsl:output method="xml" />
>
>  <xsl:template match="/">
>    <Root>
>      <xsl:call-template name="processThis">
>        <xsl:with-param name="nodeList" select="/*/a"/>
>      </xsl:call-template>
>    </Root>
>  </xsl:template>
>
>  <xsl:template name="processThis">
>    <xsl:param name="nodeList" />
>
>      <xsl:for-each select="$nodeList">
>        <xsl:sort /><!-- ***** This causes the problem -->
>        <xsl:variable name="thisVal" select="." />
>        <result value="{$thisVal}" />
>      </xsl:for-each>
>    </xsl:template>
>
> </xsl:stylesheet>
>
> The Ant script is:
>
> <project default="trans">
>
>    <target name="trans">
>        <delete file="out.xml"/>
>        <xslt style="trans.xsl" in="a.xml" out="out.xml"/>
>    </target>
>
> </project>
>
>
> The expected output is:
>
> <Root>
>    <result value="AAA" />
>    <result value="BBB" />
> </Root>
>
> But if I run the ant script, just an empty 'Root' element is generated, without child
nodes.
>
> If I comment out the line marked with '*****', the generated Root element does contain
child elements, but unsorted (as one would expect in this case).
>
> If I process the elements directly (and not in a template passing the list to process
as a parameter), then I can use 'sort', and everything works as expected. Here is the 'direct'
transformation:
>
> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>
>    <xsl:output method="xml" />
>
>    <xsl:template match="/">
>        <Root>
>            <xsl:for-each select="/*/a">
>                <xsl:sort />
>                <xsl:variable name="thisVal" select="." />
>                <result value="{$thisVal}" />
>            </xsl:for-each>
>        </Root>
>    </xsl:template>
>
> </xsl:stylesheet>
>
> So my question is: why isn't a list passed as a parameter to a template processed with
a 'sort' option -- in Ant?
>
> Thank you!
> AL
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
> For additional commands, e-mail: user-help@ant.apache.org
>
>

Scot P. Floess             RHCT  (Certificate Number 605010084735240)
Chief Architect FlossWare  http://sourceforge.net/projects/flossware
                            http://flossware.sourceforge.net
                            https://github.com/organizations/FlossWare

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Mime
View raw message