xsl-list
[Top] [All Lists]

RE: convert an attribute's value to a text node?

2002-12-03 03:03:34
Hi, I am in the process of converting my heavy uses of Saxon 
and it's extensions to more standard XSLT 2.0 + XPath 2.0 and 
here is the one problem I have left:

I need to convert a string to a text-node. More specifically, 
I need to convert the value of an attribute to a text-node, 
because I have special templates that expect text-nodes.

In the old days I used:

    saxon:node-set(string(@att))

which would give me back a text-node.

Note that saxon's implementation of exsl:node-set would not 
allow a string argument, but saxon:node-set would, and would 
do exactly what I needed.

Actually (for the record), I don't think Saxon ever returned a text node
from this function. In Saxon 6.3 and 6.4 a string argument was rejected.
In Saxon 6.5 a string argument was accepted, but the result was a
document node that owned a text node whose value was the supplied
string.

The exslt common:node-set() function appears to have changed at some
stage and now specifies that with a string argument, the result should
be a text node. Saxon has never implemented this version of the EXSLT
specification (and I don't recall seeing any discussion of the change -
change control is not one of EXSLT's strong points).

The most portable way to get a text node from a string, if you really
want one, is

<xsl:variable name="tree">
   <xsl:value-of select="@att"/>
</xsl:variable>
... exslt:node-set($tree/text()) ...

But it does strike me as a somewhat odd way of doing things.

Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list