我想使用EXSLT库在XSLT 1.0中编写一个函数。这是我的样式表。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:func="http://exslt.org/functions"
xmlns:my="http://www.example.com/">
<xsl:output method="text" encoding="UTF-8"/>
<func:function name="my:test">
<xsl:param name="param1" />
<xsl:param name="param2" />
<func:result select="concat($param1, $param2)" />
</func:function>
<xsl:template match="/">
<xsl:value-of select="my:test('test1', 'test2')" />
</xsl:template>
</xsl:stylesheet>
不幸的是,当我尝试使用xsltproc
执行它时,我收到以下错误。
{http://www.example.com/}测试:调用太多参数 xmlXPathCompiledEval:堆栈中剩余1个对象。 运行时错误:文件exslt_function_test.xsl第16行元素值 XPath评估没有返回任何结果。
我没有看到任何错误。使用两个参数定义和调用该函数。过去有没有人遇到过类似的问题?
删除任何不必要的评论......不,我不能使用XSLT 2.0。
答案 0 :(得分:2)
嗯,这是一个很好的谜题。结果是libxslt(xsltproc使用的处理器)将不会执行该函数,除非在extension-element-prefixes="func"
元素中包含<xsl:stylesheet>
。
不确定为什么 - 其他处理器没有这样的问题。