xml - 处理 XSLT 函数中的空序列

标签 xml xslt

我有一个 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) = 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? 参数类型上的 ? 允许提供一项或不提供一项。 string(...) 函数从不返回空字符串,因此会将空序列转换为零长度字符串。

关于xml - 处理 XSLT 函数中的空序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1310035/

相关文章:

sql - 转换时转义 XML 特殊字符

python - 如何使用Python通过ElementTree使用fromstring进行xml解析?

mysql - 从 XML 数据创建 MySQL 表

javascript - 从 XML 模式生成表单键

xml - 浏览器呈现 XSLT 与 PHP 呈现 XSLT

java - 无法从 SaxonEE9-9-1-4J 中的 XSLT 调用扩展 Java 方法

java - 我在状态栏下没有点击

android - 谷歌地图没有使用自定义按钮放大和缩小

java - 使用 xslt 从 xsd 生成 xml

xslt - 如何防止 XSLT 中的单词被截断