我想用几个可以返回 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>
最佳答案
<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>