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