我想用几个可以返回 bool 值的参数创建一个 xsl:function,我遇到了麻烦:
<xsl:if test="my:isEqual($Object1, $Object2)">SAME!</xsl:if>
<xsl:function name="my:isEqual">
<xsl:param name="Object1" />
<xsl:param name="Object2" />
<xsl:variable name="Object1PostalCode select="$Object1/PostalCode" />
<xsl:variable name="Object2PostalCode select="$Object2/PostalCode" />
<xsl:if test="$Object1PostalCode = $Object2PostalCode">
!!!What to do here!!!
</xsl:if>
</xsl:function>
最佳答案
I want to create a xsl:function with a few parameters that can return a boolean, i'm having troubles:
<xsl:function name="my:isEqual">
你的麻烦从这里开始。正如所写,没有什么可以保证此函数不会返回任何 XDM 类型的项目或项目序列。
要记住的规则 : 在写
xsl:function
时请指定其返回类型。还要指定参数的类型。这使您免于运行时类型不匹配问题。它还为更强大和更积极的优化提供了机会。所以,不要写下面的内容——你可能很难捕捉到运行时类型不匹配的问题 :
<xsl:function name="my:isEqual">
<xsl:param name="Object1" />
<xsl:param name="Object2" />
而是使用 XSLT 2.0 的全部功能并指定正确的类型 :
<xsl:function name="my:isEqual" as="xs:boolean">
<xsl:param name="Object1" as="element()?" />
<xsl:param name="Object2" as="element()?" />
最后,代码结束 :
<xsl:if test="$Object1PostalCode = $Object2PostalCode">
!!!What to do here!!!
</xsl:if>
</xsl:function>
只需返回比较 - 它的计算结果与
true()
完全相同或 false()
: <xsl:sequence select="$Object1PostalCode eq $Object2PostalCode"/>
</xsl:function>
关于function - 如何创建一个 xsl :function that returns a boolean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10296938/