Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT1.0如何使用fn(函数名称空间)进行扩展_Xslt_Function_Extend_Xslt 1.0 - Fatal编程技术网

XSLT1.0如何使用fn(函数名称空间)进行扩展

XSLT1.0如何使用fn(函数名称空间)进行扩展,xslt,function,extend,xslt-1.0,Xslt,Function,Extend,Xslt 1.0,我想知道如何扩展XSLT1.0,以便在 我刚刚被告知,从现在起,系统将使用MSXML XSLT处理器。我所有的样式表都是用2.0编写的。。。所以现在我是stack,什么都不起作用,也不知道如何使用fn名称空间中的函数 我想知道是否有可能以某种方式扩展XSLT1.0,因为我使用了很多这样的函数。或者我现在该怎么办?我完全迷路了,很沮丧 非常感谢您的帮助 非常感谢 嗯,伊姆浩,你有点卡住了。MSXML不实现XSLT2.0和XPath2.0。因此,基本上你只有三个选择: 尝试说服您的供应商,他们应该为

我想知道如何扩展XSLT1.0,以便在

我刚刚被告知,从现在起,系统将使用MSXML XSLT处理器。我所有的样式表都是用2.0编写的。。。所以现在我是stack,什么都不起作用,也不知道如何使用fn名称空间中的函数

我想知道是否有可能以某种方式扩展XSLT1.0,因为我使用了很多这样的函数。或者我现在该怎么办?我完全迷路了,很沮丧

非常感谢您的帮助


非常感谢

嗯,伊姆浩,你有点卡住了。MSXML不实现XSLT2.0和XPath2.0。因此,基本上你只有三个选择:

  • 尝试说服您的供应商,他们应该为另一个XSLT处理器(如Saxon.NET)提供支持
  • 使用microsoft的msxsl:script函数重新实现所有需要的函数。这将证明是困难的,并且会使您与Microsoft解析器产生依赖关系。此外,它只转换XPath函数——这里不考虑XSLT2.0功能
  • 使用XSLT1.0重新实现样式表

  • 就个人而言,我认为ony选项1和3是可行的。

    如果您坚持使用MSXML作为处理器,我认为您只需要在Obalix的答案中选择选项2,但您可能必须自己编写扩展函数

    下面是一个如何执行大写函数的示例。这将使用XSLT中的javascript来完成该功能

    <?xml version='1.0'?>
    <xsl:stylesheet version="1.0"
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          xmlns:msxsl="urn:schemas-microsoft-com:xslt"
          xmlns:user="http://mycompany.com/mynamespace">
    
    <msxsl:script language="javascript" implements-prefix="user">
       function uppercase(textToConvert) 
       {
          return textToConvert.toUpperCase();
       }
    </msxsl:script>
    
    <xsl:template match="text()">
       <xsl:value-of select="user:uppercase(string(.))"/>
    </xsl:template>
    
    </xsl:stylesheet>
    
    
    函数大写(textToConvert)
    {
    返回textToConvert.toUpperCase();
    }
    
    您可以做的是将所有脚本函数放在它们自己的XSLT表中,并将其包含在您自己的XSLT样式表中


    这有多复杂,取决于您使用了多少XPath2.0函数。

    @Obalix谢谢。不幸的是,他们不会更换处理器。我只是想知道我是否可以做任何事情,这样我就可以使用所有的函数了?以某种方式扩展MSXML?签名我想我遇到了一个大难题。你可以看看是否有什么可以使用的东西,但是,除非微软决定将XSLT2.0合并到其他处理器中,否则你就得自行其是了。但是,别担心,我刚才也落入了同样的陷阱。类似MSXML的XSLT1.0处理器支持XPath1.0和XSLT1.0中定义的函数。如果将其与w3schools发布的内容进行比较,您将看到XPath 1.0中可用的函数是XPath 2.0中定义的函数的子集。因此,您可以将W3上的一些函数与MSXML一起使用,但当然只能使用XPath 1.0中已经定义的函数,而不能使用XPath 2.0中新定义的函数。基本上,如果您想使用XSLT1.0处理器,那么使用w3schools作为参考并不是一个好主意。@Tim C非常感谢。我注意到您声明了msxsl名称空间(xmlns:msxsl=“urn:schemas-microsoft-com:xslt”)。我想知道您是否知道一个阅读MSXML的好地方,这样我就可以理解它并找出我可以使用的。。。我会非常感激的!谢谢我不知道它有多好,但你可以在MSDN上试试这个链接-