Обработка пустой последовательности в функции XSLT

Да Linq для NHibernate будет, переписывают, я поразил проблему в оператор SelectMany и если Вы считаете Fabio последний ответ здесь , то Вы будете видеть, что текущая реализация основана на Критериях.

10
задан zx485 8 August 2017 в 15:31
поделиться

1 ответ

В XSLT нет нулевого значения. Чтобы представить отсутствующее значение, вы можете использовать строку нулевой длины или пустую последовательность. Это не одно и то же - пустая последовательность вернет 0 из count ($ x) , а строка нулевой длины - это последовательность, содержащая один элемент типа xs: string, длина строки которого равна 0 ( count ($ x) = 1 и длина строки ($ 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 (...) никогда не возвращает пустую строку, поэтому преобразует пустую последовательность в строку нулевой длины.

Измените способ выбора значения, чтобы всегда была пустая строка (или оберните / измените функцию 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 (...) никогда не возвращает пустую строку, поэтому преобразует пустую последовательность в строку нулевой длины.

Измените способ выбора значения, чтобы всегда была пустая строка (или оберните / измените функцию 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 (...) никогда не возвращает пустую строку, поэтому преобразует пустую последовательность в строку нулевой длины.

16
ответ дан 3 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: