DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=18377>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=18377

XSLTC error in complex xsl:if statement

           Summary: XSLTC error in complex xsl:if statement
           Product: XalanJ2
           Version: CurrentCVS
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Minor
          Priority: Other
         Component: org.apache.xalan.xsltc
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


Input stylesheet:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
 version="1.0"
 xmlns:foxy="http://foxyshadis.dyndns.org";
 xmlns:dt="http://exslt.org/dates-and-times";
 exclude-result-prefixes="xalan str foxy dt func redirect exslt"
 xmlns:xalan="http://xml.apache.org/xalan";
>

<xsl:variable name="rawtext">
<xsl:apply-templates select="//entry" mode="grab">
<xsl:sort select="@date" data-type="text" order="descending"/>
</xsl:apply-templates>
</xsl:variable>
<xsl:variable name="text" select="xalan:nodeset($rawtext)"/>

<xsl:template match="*" mode="grab">
<xsl:copy><xsl:apply-templates select="@*|node()" mode="grab"/></xsl:copy>
</xsl:template>

<xsl:template match="@*" mode="grab">
<xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute>
</xsl:template>

<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="$text" mode="post"/>
</body>
</html>
</xsl:template>

<xsl:template match="entry" mode="post">
<xsl:variable name="pos" select="position()"/>
<xsl:choose>
<xsl:when test="$pos=1">
Newday- <xsl:value-of select="dt:date(@date)"/>
</xsl:when>
<xsl:otherwise>
<xsl:if test="dt:date(@date)!=dt:date($text/entry[$pos - 1]/@date[1])">
Newday- <xsl:value-of select="dt:date(@date)"/>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>

Input XML:
<?xml version="1.0" encoding="UTF-8"?>
<entries>
<entry date="2003-03-25T07:30:00"/>
<entry date="2003-03-23T14:00:00"/>
<entry date="2003-03-21T17:30:00"/>
<entry date="2003-03-23T18:00:00"/>
<entry date="2003-03-21T16:30:00"/>
<entry date="2003-03-25T08:30:00"/>
</entries>

Command strings:
java org.apache.xalan.xslt.Process -xsl 
c:/fox/text/foxy/journal/test-problem-2.xsl -in 
c:/fox/text/foxy/journal/test-problem-2.xml
java org.apache.xalan.xslt.Process -xsltc -xt -xo xjournal_xsltc -xx -xsl 
c:/fox/text/foxy/journal/test-problem-2.xsl -in 
c:/fox/text/foxy/journal/test-problem-2.xml

Xalan output:
<html>
<body>
Newday- 2003-03-25
Newday- 2003-03-23
Newday- 2003-03-21</body>
</html>

XSLTC output:
(Location of error unknown)XSLT Error (java.lang.NoSuchMethodError): 
org.apache.xalan.xsltc.runtime.BasisLibrary.compare(
Lorg/apache/xpath/objects/XString;Lorg/apache/xpath/objects/XString;
ILorg/apache/xalan/xsltc/DOM;)Z

XSLTC output with the complex if test commented out:
<html>
  <body>
Newday- 2003-03-25</body>
</html>

The logic here is to capture all pertinent data in a variable, which is the 
turned into a nodeset and acted upon. This does seem inefficient, but it lets me 
do all of the sorting, authorization, and selection beforehand, without putting 
that mess into the main code. I'm assuming the DTM is optimized enough to not 
make a fuss on big chunks of text.

The big if then tests if the current date is different from last time's date.

Reply via email to