在处理XSLT的功能空序列(Handling empty sequence in XSLT func

2019-08-02 00:58发布

我有一个XSLT功能,其检查所发送的参数是否处于YYYYMMDD格式或没有。 在某些情况下,我没有得到任何价值的功能,在这些条件SAXON抛出下面的错误

“空序列不允许作为CDA的第一个参数:isValidDate()”

任何建议如何处理这种情况?

Answer 1:

在XSLT没有Null值。 代表不存在的值,可以使用零长度字符串或空序列。 它们不是同样的事情-空序列将从返回0 count($x) ,但零长度字符串是包含类型xs一个项目的序列:字符串,其具有0(串长度count($x) = 1string-length($x) = 0 )。

大多数标准XPath函数接受一个零长度字符串或空序列,但您的自定义功能可能不会。

该问题可能如果你选择角色的顺序发生。 例如,如果您选择包含节点不存在串一个节点的值,你会得到一个空序列 - 但如果节点存在和值为空,你会得到空字符串。

修改您所选择的价值的方式总是有一个空字符串(或包装材料/改变isValidDate函数接受空序列)。 下面的函数定义将接受空序列,并将其转换为一个零长度字符串:

<xsl:function name="cda:isValidDate" as="xs:boolean">
  <xsl:param name="datestring" as="xs:string?"/>
  <xsl:variable name="reallyastring" select="string($datestring)"/>
  Your code
</xsl:function>

?xs:string? PARAM类型允许提供一个或没有任何项目。 该string(...)函数永远不会返回一个空字符串,从而将空序列转换成零长度字符串。



文章来源: Handling empty sequence in XSLT function
标签: xml xslt