Thanks Mike!

On Sun, Feb 6, 2011 at 1:07 AM, Michael Ludwig <mil...@gmx.de> wrote:

> Sushant Sinha schrieb am 04.02.2011 um 15:08 (+0530):
> > I am using xalan 2.7.1 for transforming an xml document using an xsl
> > stylesheet. I have attached the input xml as example.xml and the rule
> > as rule.xsl.
>
> Hmm, the XML file is ~ 128 KB and probably irrelevant. I'm pasting the
> XSLT here so people can read it without the unpacking hassle:
>
>          \,,,/
>          (o o)
> ------oOOo-(_)-oOOo------
> <xsl:stylesheet
>  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0"
>  xmlns:xalan="http://xml.apache.org/xalan";
>  exclude-result-prefixes="xalan">
>
> <xsl:template match="/">
> <xsl:variable name="business_name"
>  select="normalize-space(/html/span/xpath)"/
> <xsl:if test="count(xalan:nodeset($business_name)) &lt; 2">
> </xsl:if>
> </xsl:template>
>
> </xsl:stylesheet>
> -------------------------
>
> So you're selecting a string (return value of normalize-space()) and
> then you're calling the nodeset() function on it - that doesn't make
> any sense, because you can't hope to have a nodeset here.
>
> > rule.xsl uses xalan extension function xalan:nodeset() and the
> > transformation runs fine with the interpretive xalan. However, it
> > fails when the property  avax.xml.transform.TransformerFactory is set
> > to org.apache.xalan.xsltc.trax.TransformerFactoryImpl
> >
> > It actually produces a java exception with the following stack:
> >
> > ERROR:  'Invalid conversion from 'node-set' to 'java.lang.String'.'
> > Exception in thread "main" javax.xml.transform.TransformerException:
> > java.lang.RuntimeException: Invalid conversion from 'node-set' to
> > 'java.lang.String'.
>
> > Is this a bug in the compiled xsltc processor? Or is there a usage
> > issue?
>
> It is a usage issue. Can't say if it also a bug.
>
> Here's a similar case (without the Xalan dependency):
>
>          \,,,/
>          (o o)
> ------oOOo-(_)-oOOo------
> <xsl:stylesheet version="1.0"
>  xmlns:exsl="http://exslt.org/common";
>  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>  <xsl:template match="/">
>    <xsl:variable name="a" select="string( . )"/>
>    <r>
>      <a><xsl:value-of select="$a"/></a>
>      <b><xsl:value-of select="exsl:node-set( $a )"/></b>
>    </r>
>  </xsl:template>
> </xsl:stylesheet>
> -------------------------
>
> Works fine for LibXSLT, Xalan and Saxon 9.1. (Which doesn't go to say
> that it makes sense.) Saxon 6.5, on the other hand, reports an error:
>
>  exslt:node-set(): argument must be a node-set or tree
>
> Also note that EXSLT is preferred over xalan:nodeset().
>
> http://xml.apache.org/xalan-j/extensions_xsltc.html#nodeset_ext
>
> --
> Michael Ludwig
>

Reply via email to