Я пытаюсь написать функцию XSLT для выбора между датами. У меня есть параметры, которые преобразуются в xs:date
, а затем используются для получения количества дней между двумя из них и соответствующим образом форматируют их. По какой-то причине переменная termDate
сообщается как неопределенная, хотя я вижу на панелях Variables и Nodes/Values Set в Oxygen ссылки на параметры и элемент, который имеет значение.Почему эта переменная XSLT не указана?
<xsl:function name="my:getStatusDate">
<xsl:param name="rehire"/>
<xsl:param name="term"/>
<xsl:param name="hire"/>
<xsl:variable name="rehireDate" select="xs:date($rehire)" as="xs:date"/>
<xsl:variable name="termDate" select="xs:date($term)" as="xs:date"/>
<xsl:variable name="hireDate" select="xs:date($hire)" as="xs:date"/>
<xsl:variable name="dayDiffTermRehire" select="days-from-duration($termDate - $rehireDate)" as="xs:integer"/>
<xsl:choose>
<xsl:when test="$term != '' and not($term)">
<xsl:choose>
<xsl:when test="$dayDiffTermRehire > xs:integer(91)">
<xsl:value-of select="format-date($rehireDate, '[M01]/[D01]/[Y0001]')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="format-date($hireDate, '[M01]/[D01]/[Y0001]')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="format-date($hireDate, '[M01]/[D01]/[Y0001]')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
Сайт вызова выглядит следующим образом:
<ExpectedStatusEffectiveDate><xsl:value-of select="my:getStatusDate(RecentHireDate, TermDate, PreviousHireDate)"/></ExpectedStatusEffectiveDate>
Проба источник XML выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<Entry>
<EmployeeFirstName>John</EmployeeFirstName>
<EmployeeLastName>Doe</EmployeeLastName>
<BirthDate>1940-01-01-01:00</BirthDate>
<RecentHireDate>1970-05-20-07:00</RecentHireDate>
<PreviousHireDate>1970-05-20-07:00</PreviousHireDate>
</Entry>
<Entry>
<EmployeeFirstName>Jane</EmployeeFirstName>
<EmployeeLastName>Doe</EmployeeLastName>
<BirthDate>1970-11-25-08:00</BirthDate>
<RecentHireDate>2003-12-22-08:00</RecentHireDate>
<PreviousHireDate>1970-06-19-07:00</PreviousHireDate>
<TermDate>2000-01-13-08:00</TermDate> <!-- NOTE: this entry HAS a TermDate -->
</Entry>
</Data>
Любой идею, почему termDate будет неопределенной в обеих случаях?
Результаты моих тестов неверны. И поэтому я отлаживал Oxygen и использовал переменные панели для просмотра текущих значений. – jktravis
Возможно, это ошибка в Oxygen. Я смог заставить его работать правильно. Не знаю, в чем проблема. Какой протокол для чего-то подобного? Просто удалите вопрос? – jktravis
Что вы хотите проверить с помощью ''? Если вы передаете элемент типа ' 2000-01-13-08: 00 ' then '$ term! = ''' True, а 'not ($ term)' false. Если вы проходите в пустой последовательности (т. Е. У вас нет элемента 'TermDate', то первое условие является ложным. –