Al Le
2016-03-07 06:37:14 UTC
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-***@ant.apache.org
For additional commands, e-mail: user-***@ant.apache.org
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-***@ant.apache.org
For additional commands, e-mail: user-***@ant.apache.org