function - 如何创建一个 xsl :function that returns a boolean

标签 function xslt xslt-2.0

我想用几个可以返回 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/

相关文章:

xml - 如何正确使用xsl :group-start-with with following siblings

xslt - 无法使用 XSLT/XPath 2.0 正确获取调试输出

PHP 和 Javascript 兼容的加密函数

xml - 如何为每个测试引用 XSL 中的当前节点值?

.net - 我可以使用Web Deploy将元素插入web.config吗?

xml - XSLT 转换以添加多个不存在的子元素

Javascript:参数函数

c - 递归函数在c中打印数字倒计时

Javascript if block 的奇怪行为

xml - XSLT - 分析以下连续节点