Re: func:function and func:result
Hermann Stamm-Wilbrandt <[email protected]> Mon, 23 Nov 2009 12:55:46 +0100
| Newsgroups | gmane.text.xml.xslt.extensions |
|---|---|
| Message-ID | <OFFE09BA5B.65FCB2E6-ONC1257677.0040C33B-C1257677.004187D5@de.ibm.com> |
Hello,
you just need two changes:
- enclose the generated output by <func:result>...</func:result> (that is
what func:result is intended for)
- use xsl:copy-of to retrieve the result.
That's is (find it at bottom), just works under xalan 2.7.1 and DataPower
compiler.:
[stammw@br8ggx73 xalan-j_2_7_1]$ java -jar xalan.jar -IN some.xml -XSL
genexslt.xsl ; echo
<?xml version="1.0" encoding="UTF-8"?><INVOIC_TYPE><xsl:if
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="string-length
($invoic_type)>0"><xsl:value-of select="$invoic_type_final"/>
</xsl:if></INVOIC_TYPE>
[stammw@br8ggx73 xalan-j_2_7_1]$
Saxon has a problem with it:
C:\saxon>java -jar saxon9.jar a.xml genexslt.xsl
Warning: at xsl:stylesheet on line 5 column 19 of genexslt.xsl:
Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
Error on line 30 of genexslt.xsl:
Cannot find a matching 3-argument function named
{http://exslt.org/functions/m.
y}getElement()
Transformation failed: Run-time errors were reported
C:\saxon>
==========================================================
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:func="http://exslt.org/functions"
xmlns:my="http://xslt.org/functions/my"
version="1.0">
<func:function name="my:getElement">
<xsl:param name="variableName"/>
<xsl:param name="variableName_final"/>
<xsl:param name="elementName"/>
<func:result>
<xsl:element name="{$elementName}">
<xsl:element name="xsl:if">
<xsl:attribute
name="test"><xsl:text>string-length($</xsl:text><xsl:value-of
select="$variableName"/><xsl:text>)>0</xsl:text></xsl:attribute>
<xsl:element name="xsl:value-of">
<xsl:attribute
name="select"><xsl:text>$</xsl:text><xsl:value-of
select="$variableName_final"/></xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
</func:result>
</func:function>
<xsl:template match="/">
<xsl:copy-of
select="my:getElement('invoic_type','invoic_type_final','INVOIC_TYPE')"/>
</xsl:template>
</xsl:stylesheet>
Mit besten Gruessen / Best wishes,
Hermann Stamm-Wilbrandt
Developer, XML Compiler
WebSphere DataPower SOA Appliances
----------------------------------------------------------------------
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martin Jetter
Geschaeftsfuehrung: Dirk Wittkopp
Sitz der Gesellschaft: Boeblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294
Tamer Demirel
<[email protected]
e> To
Sent by: [email protected]
exslt-bounces@lis cc
ts.fourthought.co
m Subject
[exslt] func:function and
func:result
11/21/2009 05:31
PM
Hallo,
i am using Xalan 2.7.1 and exslt.
I habe Problems with func:result.
I want to have as result a part of xslt code.
My Example:
Function:
<func:function name="my:getElement">
<xsl:param name="variableName"/>
<xsl:param name="variableName_final"/>
<xsl:param name="elementName"/>
<xsl:element name="{$elementName}">
<xsl:element name="xsl:if">
<xsl:attribute
name="test"><xsl:text>string-length($</xsl:text><xsl:value-of
select="$variableName"/><xsl:text>)>0</xsl:text></xsl:attribute>
<xsl:element name="xsl:value-of">
<xsl:attribute
name="select"><xsl:text>$</xsl:text><xsl:value-of
select="$variableName_final"/></xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
<func:result/>
</func:function>
Call of the Function:
<xsl:value-of
select="my:getElement('invoic_type','invoic_type_final','INVOIC_TYPE')"/>
I get the failure:
misplaced literal result in a func:function container.
But it works for me.
This doesnt work:
<func:function name="my:getElement">
<xsl:param name="variableName"/>
<xsl:param name="variableName_final"/>
<xsl:param name="elementName"/>
<func:result>
<xsl:element name="{$elementName}">
<xsl:element name="xsl:if">
<xsl:attribute
name="test"><xsl:text>string-length($</xsl:text><xsl:value-of
select="$variableName"/><xsl:text>)>0</xsl:text></xsl:attribute>
<xsl:element name="xsl:value-of">
<xsl:attribute
name="select"><xsl:text>$</xsl:text><xsl:value-of
select="$variableName_final"/></xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
</func:result>
</func:function>
Do somebody know, what i can do to fix the problem? Maybe older version
helps?
Thx,
Tamer
_______________________________________________
exslt mailing list
[email protected]
http://www.exslt.org/list