xsl-list
[Top] [All Lists]

[xsl] Re: How to make a xsl:function that returns the function()

2013-01-19 10:34:12
This problem has been resolved by changing the code as follows:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:ahf="http://www.yahoo.co.jp/tmakita";>

<xsl:template match="root">
<xsl:variable name="selectFunc" as="function(*)"
select="ahf:funcGetChildElementByName('d')"/>
<xsl:copy>
<xsl:sequence select="$selectFunc(.)"/>
</xsl:copy>
</xsl:template>

<xsl:function name="ahf:funcGetChildElementByName"
as="function(element()) as element()*">
<xsl:param name="prmElemName" as="xs:string"/>
<xsl:sequence select="let $en := $prmElemName,
$f := function($a as element(),$elemName as xs:string) as element()*
{$a/child::*[starts-with(name(),$elemName)]}
return $f(?,$en)"/>
</xsl:function>

<xsl:variable name="ahf:funcGetChildElementByName"
as="function(element(),xs:string) as element()*">
<xsl:sequence select="function($elem as element(),$elementName) as
element()* {$elem/child::*[starts-with(name(),$elementName)]}"/>
</xsl:variable>

</xsl:stylesheet>

Sorry for bother you.

Toshihiko Makita


(2013/01/20 0:16), Toshihiko Makita wrote:
Hi List,

I'm very interested in XSLT 3.0 and have a question about the function
that returns the function as its return value.
Is it possible to make a such xsl:function?
I tested using the following code in oXygen 14.1 with Saxon 9.4.0.4.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:ahf="http://www.yahoo.co.jp/tmakita";>

<xsl:template match="root">
<xsl:variable name="slectFunc" as="function(*)"
select="ahf:funcGetChildElementByName('d')"/>
<xsl:copy>
<xsl:sequence select="$slectFunc(.)"/>
</xsl:copy>
</xsl:template>

<xsl:function name="ahf:funcGetChildElementByName" as="function(*)">
<xsl:param name="prmElemName" as="xs:string"/>
<xsl:sequence select="function($a as element()) as element()*
{$a/child::*[starts-with(name(),$prmElemName)]}"/>
</xsl:function>

</xsl:stylesheet>

However Saxon returns following error.

System ID: D:\My Documents\Proj\XSLT-TEST\20130113-func\test.xsl
Main validation file: D:\My Documents\Proj\XSLT-TEST\20130113-func\test.xsl
Engine name: Saxon-EE 9.4.0.4
Severity: error
Description: 0

Is there any workarounds?

Regards,

Toshihiko Makita



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