xsl-list
[Top] [All Lists]

RE: [xsl] exsl:node-set and Saxon 6.5.5

2007-02-21 16:52:21
The implementation of exsl:node-set() in Saxon 6.x is a bit of a hack. A
result tree fragment in Saxon 6.x is a document node, with a special bit set
to say "I am a result tree fragment": this bit artifically disables
operations such as "/" applied to the document node. The effect of
exsl:node-set() is to unset this bit in situ, thus enabling such operations.
A bit dirty, but the XSLT spec allows extension functions to do anything you
like, so it's not technically non-conformant.

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


-----Original Message-----
From: Manfred Staudinger 
[mailto:manfred(_dot_)staudinger(_at_)gmail(_dot_)com] 
Sent: 21 February 2007 22:21
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] exsl:node-set and Saxon 6.5.5

Hi All,

As I rely heavily on the superb diagnostics of Saxon when 
testing client-side (browser) XSLT 1.0 I would like to 
understand the following.

When I run the stylesheet below with SAXON 6.5.5 (with two 
<xsl:copy-of statements) then the (unexpected) output is

<?xml version="1.0" encoding="utf-8"?>
<test>
   <Title>From exsl:node-set($rtf)/a/b:</Title>
   <b>
      <c>
         <d/>
      </c>
   </b>
   <Title>Directly from $rtf/a/b/c:</Title>
   <c>
      <d/>
   </c>
</test>

However, if I delete the first <xsl:copy-of then I get this 
error message from the other one
   To use a result tree fragment in a path expression, either
   use exsl:node-set() or specify version='1.1'
as I think correctly.

Did I miss something XSLT-wise ?

Regards, Manfred

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
      xmlns:exsl="http://exslt.org/common";
      exclude-result-prefixes="exsl"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output indent="yes"/>

<xsl:template match="/">
      <xsl:variable name="rtf">
              <a>
                      <b>
                              <c>
                                      <d />
                              </c>
                      </b>
              </a>
      </xsl:variable>
      <test>
              <Title><xsl:text>From 
exsl:node-set($rtf)/a/b:</xsl:text></Title>
              <xsl:copy-of select="exsl:node-set($rtf)/a/b"/>
              <Title><xsl:text>Directly from 
$rtf/a/b/c:</xsl:text></Title>
              <xsl:copy-of select="$rtf/a/b/c"/>
      </test>
</xsl:template>
</xsl:stylesheet>

--~------------------------------------------------------------------
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>