2016-03-01 53 views
0

我想写一个XSLT函数来选择一些日期。我有参数被转换为xs:date,然后用于获取其中两个之间的天数,并适当地格式化它们。出于某种原因,尽管我可以在Oxygen的Variables and Nodes/Values Set面板中看到参数引用和确实有值的元素,但是termDate变量被报告为未定义。为什么这个XSLT变量返回undefined?

<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

也许这是氧气中的一个错误。我能够让它正确地工作。不知道问题是什么。什么是这样的协议?只要删除这个问题? – jktravis

+0

你想用'''检查什么?如果你传递了一个像' 2000-01-13-08:00'这样的元素,那么'$ term!='''为真,但'not($ term)'为假。如果你传递一个空序列(即你没有'TermDate'元素,那么第一个条件是假的。 –

回答

0

我要把这个粉笔写成一个氧气错误。我不确定发生了什么变化,但在将函数分离到自己的样式表后,它开始工作。然后我将它复制回原来的,一切似乎都奏效。