xsl-list
[Top] [All Lists]

RE: [xsl] XSLT 2.0: Cast does not allow an empty sequence

2007-07-19 01:09:21
Please check whether this still happens with 8.9.0.4. It feels like a bug
that was fixed.

Michael Kay
http://www.saxonica.com/

 

-----Original Message-----
From: Sam Byland [mailto:shbyland(_at_)comcast(_dot_)net] 
Sent: 19 July 2007 02:49
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] XSLT 2.0: Cast does not allow an empty sequence

Hello again,

Still debugging the upgrade to XSLT 2.0.  This one took some 
time to create a reduced stylesheet that still reproduced the 
error.  The XML instance file (probably irrelevant) is the 
same as my last post:

<?xml version="1.0" encoding="UTF-8"?>
<Test>"Hello" &#x2260; "World"</Test>

Using SaxonB-8.9j, I get the following error:

<<Error on line 42 of file:/C:/Test/Saxon/Test20.xsl:
XPTY0004: Cast does not allow an empty sequence 
Transformation failed: Run-time errors were reported>>

with the following XSLT:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
    <xsl:output name="OutHTML" method="html" encoding="windows-1252"/>

    <xsl:param name="DocumentCode" select=" 'abc11111' "/>
    <xsl:param name="Flag1" select="boolean( true() or 
false() )"/> <!-- force to true -->
    <xsl:param name="Flag2" select="boolean( number( 
substring( $DocumentCode , 6 , 1 ) ) )"/>
    <xsl:param name="Flag3" select="substring( $DocumentCode 
, 6 , 1 )"/>

    <xsl:variable name="FirstPass" as="document-node()">
        <xsl:document>
            <xsl:copy-of select="Test"/>
        </xsl:document>
    </xsl:variable>

    <xsl:template match="Test">
        <xsl:result-document href="test20.html" format="OutHTML">
            <xsl:apply-templates select="$FirstPass" mode="SomeMode"/>
        </xsl:result-document>
    </xsl:template>

    <xsl:template match="Test" mode="SomeMode">
        <html>
            <head>
                <title>test</title>
            </head>
            <body>
                <p><xsl:call-template name="SomeNamedTemplate"/></p>
            </body>
        </html>
    </xsl:template>

    <xsl:template name="SomeNamedTemplate">

        <xsl:variable name="SomeVariable1">
            <xsl:choose>
                <xsl:when test="$Flag3 = '1' and 
//SomeElement[not(ancestor::Foo)][not(contains(string(Bar),'$'
))]">true</xsl:when>
                <xsl:when test="$Flag3 != '1' and 
//SomeElement[not(contains(string(Foo),'$'))]">true</xsl:when>
            </xsl:choose>
        </xsl:variable>

        <xsl:value-of select="$SomeVariable1"/>

    </xsl:template>

</xsl:stylesheet>

*However*, when I try to debug by adding an xsl:message 
within xsl:variable name="SomeVariable1", the error goes away 
(?!).  i.e. with this mod:

        <xsl:variable name="SomeVariable1">
            <!-- the xsl:message instruction below makes 
error go away! -->
            <xsl:message>Flag3: <xsl:value-of 
select="$Flag3"/>, Cond1: 
<xsl:value-of
select="//SomeElement[not(ancestor::Foo)][not(contains(string(
Bar),'$'))]"/>,
Cond2: <xsl:value-of
select="//SomeElement[not(contains(string(Foo),'$'))]"/></xsl:message>
            <xsl:choose>
                <xsl:when test="$Flag3 = '1' and 
//SomeElement[not(ancestor::Foo)][not(contains(string(Bar),'$'
))]">true</xsl:when>
                <xsl:when test="$Flag3 != '1' and 
//SomeElement[not(contains(string(Foo),'$'))]">true</xsl:when>
            </xsl:choose>
        </xsl:variable>

I now get the following in the output, and the transformation 
continues to the end without any errors:

<<Flag3: 1, Cond1: , Cond2: >>

Any thoughts on what is going on here?

tia,

...sam 



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>