2016-03-01 2 views
0

Я пытаюсь написать функцию 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 &gt; 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 будет неопределенной в обеих случаях?

+0

Результаты моих тестов неверны. И поэтому я отлаживал Oxygen и использовал переменные панели для просмотра текущих значений. – jktravis

+0

Возможно, это ошибка в Oxygen. Я смог заставить его работать правильно. Не знаю, в чем проблема. Какой протокол для чего-то подобного? Просто удалите вопрос? – jktravis

+0

Что вы хотите проверить с помощью ''? Если вы передаете элемент типа ' 2000-01-13-08: 00' then '$ term! = ''' True, а 'not ($ term)' false. Если вы проходите в пустой последовательности (т. Е. У вас нет элемента 'TermDate', то первое условие является ложным. –

ответ

0

Я собираюсь записать это до ошибки Oxygen. Я не уверен, что изменилось, но после выделения функции в ее собственную таблицу стилей она начала работать. Затем я скопировал его обратно в оригинал, и все, казалось, сработало.

 Смежные вопросы

  • Нет связанных вопросов^_^