The following stylesheet generates a variable x using a sequence
constructor that evaluates to an empty sequence...
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xsl:variable name="x">
<xsl:sequence select="()"/>
</xsl:variable>
<xsl:template match="/">
<xsl:message select="'C1:',
$x instance of xs:string,
string-length($x)
"/>
<xsl:message select="'C2:',
$x instance of document-node(),
count($x/node()),
$x/node() instance of text(),
$x/text()/string-length(.)
"/>
</xsl:template>
</xsl:stylesheet>
$x is a variable that is a document node with a text node child the
text node having zero length.
I just read https://www.w3.org/TR/xslt-30/#constructing-complex-content
10 times but still don't see where the text node came from
having the xsl:sequence there means it avoids the XSLT 1 special case
returning a string, and not having an as= attribute means there is an
implicit document node generated, but I would expected that $x was
just a document node with no children, but saxon (Saxon-HE 9.9.0.1J)
produces
$ saxon9 ev.xsl ev.xsl
C1: false 0
C2: true 1 true 0
<?xml version="1.0" encoding="UTF-8"?>
If someone could point me at the right bit of the spec I think I'm
missing a step somewhere...
David
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--