我有一个XSLT函数,它检查发送的参数是否是YYYYMMDD格式.在某些情况下,我没有获得该函数的任何值,在这些条件下,SAXON抛出的误差低于此值
"不允许空序列作为cda的第一个参数:isValidDate()"
有什么建议如何处理这种情况?
Rob*_*tie 16
在XSLT中没有Null值.要表示缺失值,可以使用零长度字符串或空序列.它们不是一回事 - 空序列将从0返回,count($x)但零长度字符串是包含一个xs:string类型的字符串,其字符串长度为0(count($x) = 1和string-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>
Run Code Online (Sandbox Code Playgroud)
在?对xs:string?PARAM类型允许提供一个或没有任何项目.该string(...)函数永远不会返回空字符串,因此会将空序列转换为零长度字符串.