В 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>
?
в параметре xs:string?
позволяет указывать один или ни один элемент. Функция string(...)
никогда не возвращает пустую строку, поэтому преобразует пустую последовательность в строку нулевой длины.