有没有一种方法可以检查我的变量在选择属性和 请拨打两个用户功能TestFx
或TestFx2
中的一个。现在我知道我可以使用 xsl:if
或xsl:choose
,但只是想知道是否有另一种方式。
这里是一个完整的演示如何做到这一点。这说明了如何在XSLT 1.0和2.0中实现高阶函数的基本原理 - 在FXSL library for functional programming with XSLT中使用。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="my:user" xmlns:my="my:my">
<xsl:output method="text"/>
<my:functions>
<my:F1/>
<my:F2/>
</my:functions>
<xsl:variable name="vMyFuncs" select="document('')/*/my:functions/*"/>
<xsl:param name="phasTextArea" select="true()"/>
<xsl:param name="pText" select="'Some Text'"/>
<xsl:template match="/*">
<xsl:variable name="vFunc" select=
"$vMyFuncs[1][$phasTextArea] | $vMyFuncs[2][not($phasTextArea)]"/>
<xsl:apply-templates select="$vFunc"/>
</xsl:template>
<xsl:template match="my:F1">
<xsl:value-of select="user:TestFx($pText)"/>
</xsl:template>
<xsl:template match="my:F2">
<xsl:value-of select="user:TestFx2($pText)"/>
</xsl:template>
<msxsl:script language = "c#" implements-prefix = "user">
public string TestFx(string text)
{
return "Text is: " + "'" +text + "'";
}
public string TestFx2(string text)
{
return string.Format("Text length is: {0}", text.Length);
}
</msxsl:script>
</xsl:stylesheet>
当这种转化是在任何XML文档(未使用),在对需要的正确的结果(user:TestFx()
称为)施加产生:
Text is: 'Some Text'
如果我们通过设置修改上面的代码$phasTextArea
至false()
,结果现在显示此时user:TestFx2()
已被称为:
Text length is: 9
而且,如所承诺的,转换没有明确的XSLT条件指令(xsl:choose
或xsl:if
)。
此外,我们不计算字符做substring()
不必要的窍门。
Rod,是的,有这样的一种方式,毕竟它并不那么困难或棘手。 – 2013-04-12 02:57:41