2017-09-25 104 views
0

我想打电话给内部XSLT编写的函数调用自定义函数2

这种方式,我把它叫做

<xsl:value-of select='foo:compareCI()'/> 

这样定义

<xsl:function name='foo:compareCI'>            
      <xsl:value-of select='jkhjkhjk'/> 
    </xsl:function> 

,现在我有将它添加到标题,但我是什么正确的方法来做到这一点?

 <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' 
     version='2.0' 
     xmlns:foo='http://whatever'> 

有人可以帮忙吗?

+0

你想让你的函数返回什么样的值?在函数体中没有上下文项,所以''会尝试选择一个名为'jkhjkhjk'的元素将不起作用。 –

+0

也许你有权利,这是错误的。我只想返回一个简单的字符串。但我不能调用它我得到这个错误'无法找到一个脚本或与命名空间关联的扩展对象',我认为xmlns:foo ='http://无论'这是因为它 – GomuGomuNoRocket

+1

我认为你得到一个错误,因为你正在将此代码与不支持XSLT 2.0的XSLT处理器一起使用。 –

回答

1

确保,如果你想使用xsl:function,一个最小的例子返回一个字符串常量的功能,你使用XSLT 2.0处理器

<xsl:function name='foo:compareCI'>            
      <xsl:sequence select="'jkhjkhjk'"/> 
    </xsl:function> 

与例如宣布一个命名空间

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:foo="http://example.com/foo"> 

然后,您可以使用例如,

<xsl:value-of select="foo:compareCI()"/> 
+0

什么意思'http://example.com',为什么我必须拥有它; – GomuGomuNoRocket

+0

您需要将名称空间URI绑定到前缀“foo”,您可以组成任何您想要的名称空间URI,我已经使用了一个明确保留用于示例的名称空间URI。如果你想要使用不同的东西。 –

+0

我收到此错误'找不到与命名空间相关的脚本或扩展对象'http://example.com/foo''。 – GomuGomuNoRocket