我有一个 XSLT 函数,它检查发送的参数是否为 YYYYMMDD 格式。在某些情况下,我没有获得函数的任何值(value),在这些情况下,SAXON 抛出以下错误
"An empty sequence is not allowed as the first argument of cda:isValidDate()"
对如何处理这种情况有什么建议吗?
最佳答案
在 XSLT 中没有 Null 值。要表示缺失值,您可以使用零长度字符串或空序列。它们不是一回事——空序列将从 count($x)
返回 0,但零长度字符串是包含一个 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>
xs:string?
参数类型上的 ?
允许提供一项或不提供一项。 string(...)
函数从不返回空字符串,因此会将空序列转换为零长度字符串。
关于xml - 处理 XSLT 函数中的空序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1310035/