[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] xsltproc buggy compared to xalan
Hi All, I'm new to the list and also pretty new to XSLT, so please forgive me if I oversee something with the following problem: I have two ways to convert an .xml to a another file using XSL, one via a xalan-based java tool but the other one using xsltproc. In the following case, it looks that xalan-java does the correct behavior, while xsltproc fails at the first attempt, but succeeds when you do the same thing twice. For me it looks like this is a serious bug in the xsltproc tool, but because I'm quite new, I simply cannot be really sure. The following xslt code goes wrong with xsltproc, but okay with my xalan-java solution: <xsl:template name="fh-type"> <xsl:param name="type"/> <!-- scan the included --> <xsl:variable name="local"> <xsl:apply-templates select="//narsim:types" mode="type"> <xsl:with-param name="type" select="$type"/> </xsl:apply-templates> </xsl:variable> <xsl:variable name="remote"> <xsl:if test="$local=''"> <xsl:variable name="filename">../../svc/types.xml</xsl:variable> <!-- check the include files --> <xsl:for-each select="//narsim:includes/narsim:include"> <xsl:variable name="documentname"> <xsl:apply-templates select="document($filename)/narsim:index" mode="ref-link"> <xsl:with-param name="include" select="."/> </xsl:apply-templates> </xsl:variable> <xsl:variable name="documentXML"><xsl:value-of select="$documentname"/>.xml</xsl:variable> <xsl:apply-templates select="document($documentXML)/narsim:types" mode="type"> <xsl:with-param name="type" select="$type"/> </xsl:apply-templates> </xsl:for-each> </xsl:if> </xsl:variable> <xsl:choose> <xsl:when test="$local=''"> <xsl:value-of select="$remote"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$local"/> </xsl:otherwise> </xsl:choose> </xsl:template> The first time you call it, in my data-set (.xml file), remote is '' (empty) while running it with my java-xalan tool, it is actually filled. However, if I pass through this the second time or I duplicate the remote part, it also works with xsltproc. For instance the following code does work: <xsl:template name="fh-type"> <xsl:param name="type"/> <!-- scan the included --> <xsl:variable name="local"> <xsl:apply-templates select="//narsim:types" mode="type"> <xsl:with-param name="type" select="$type"/> </xsl:apply-templates> </xsl:variable> <xsl:variable name="remote1"> <xsl:if test="$local=''"> <xsl:variable name="filename">../../svc/types.xml</xsl:variable> <!-- check the include files --> <xsl:for-each select="//narsim:includes/narsim:include"> <xsl:variable name="documentname"> <xsl:apply-templates select="document($filename)/narsim:index" mode="ref-link"> <xsl:with-param name="include" select="."/> </xsl:apply-templates> </xsl:variable> <xsl:variable name="documentXML"><xsl:value-of select="$documentname"/>.xml</xsl:variable> <xsl:apply-templates select="document($documentXML)/narsim:types" mode="type"> <xsl:with-param name="type" select="$type"/> </xsl:apply-templates> </xsl:for-each> </xsl:if> </xsl:variable> <!-- Duplicate previous code to check if it works around bug in xsltproc --> <xsl:variable name="remote2"> <xsl:if test="$local=''"> <xsl:variable name="filename">../../svc/types.xml</xsl:variable> <!-- check the include files --> <xsl:for-each select="//narsim:includes/narsim:include"> <xsl:variable name="documentname"> <xsl:apply-templates select="document($filename)/narsim:index" mode="ref-link"> <xsl:with-param name="include" select="."/> </xsl:apply-templates> </xsl:variable> <xsl:variable name="documentXML"><xsl:value-of select="$documentname"/>.xml</xsl:variable> <xsl:apply-templates select="document($documentXML)/narsim:types" mode="type"> <xsl:with-param name="type" select="$type"/> </xsl:apply-templates> </xsl:for-each> </xsl:if> </xsl:variable> <!-- /Duplicate --> <xsl:choose> <xsl:when test="$local=''"> <xsl:choose> <xsl:when test="$remote1=''"> <xsl:value-of select="$remote2"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$remote1"/> </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:otherwise> <xsl:value-of select="$local"/> </xsl:otherwise> </xsl:choose> </xsl:template> Has anyone seen this strange behavior or do I actually do something really weird here? Kind regards, Roalt -- Roalt
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|