如何创建一个XSL:函数返回一个布尔
问题描述:
我想创建一个XSL:有几个参数功能,可以返回一个布尔值,我遇到的麻烦:如何创建一个XSL:函数返回一个布尔
<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:函数,可以返回 一个布尔值几个参数,我遇到的麻烦:
<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>
简单地返回comparisson - 这正是评估要么true()
或false()
:
<xsl:sequence select="$Object1PostalCode eq $Object2PostalCode"/>
</xsl:function>
答
你只是想
<xsl:sequence select="$Object1PostalCode = $Object2PostalCode"/>
而不是xsl:if
。
大。然而,实际测试稍微复杂一点。是否允许这样做一个复杂的'选择' ? –
2012-04-24 12:47:34
@BasHendriks:仍然一样 - 只是输出(评估)的测试,无论它有多复杂。 – 2012-04-24 13:17:16
谢谢,很好的解释:) – Charles 2013-02-05 14:36:01