如何计算日期

时间:2009-09-10 13:16:36

标签: xslt

我已经定义了模板

<xsl:template match="DBE:Object" mode="TestTable">
   <table width="100%" border="0">
      <tr>
        Delivery Date 
        Latest Possible Order Date
      </tr>
      <xsl:apply-templates select="DBE:Attribute[@name='DeliveryDate']/DBE:Date/>
      <xsl:apply-templates select="DBE:Attribute[@name='LatestOrderDate']"/>
   </table>
</xsl:template>

现在我要计算“LatestOrderDate”=“DeliveryDate” - 42天。 我该怎么办?

2 个答案:

答案 0 :(得分:0)

你应该更加冗长。如果您必须坚持使用XSLT 1.0,我建议使用EXSLT http://www.exslt.org或者来自Sal Mangano的'XSLT Cookbook'第1版的代码示例,由O'Reilly出版,请参阅www.oreilly.de/catalog/9780596003722/

如果我理解正确,第一列包含交付日期,而lastOrderDate将存储到新的右列。所有其他列的内容将逐字复制到输出。

我们的想法是首先轮询第一列的内容并将其存储到变量deliveryDate中。然后将处理子TableData元素。当到达最后一个TableData元素时,将向包含计算的lastOrderDate结果的每个表行添加一个新的表格单元格。

请参阅我的第二个答案中的代码示例。

答案 1 :(得分:0)

“代码示例”

<xsl:template match="DBE:Attribute[@name='TestTable']/DBE:Table/DBE:TableRow">
  <xsl:variable name="deliveryDate" select="string(DBE:TableData[position()=1])"/>
  <tr>
    <xsl:apply-templates mode="table" select="DBE:TableData">
      <xsl:with-param name="deliveryDate" select="$deliveryDate"/>
    </xsl:apply-templates>
  </tr>
</xsl:template>

<xsl:template mode="table" match="DBE:TableData">
  <xsl:param name="deliveryDate"/>
  <td>
    <xsl:value-of select="string(.)"/>
  </td>
  <xsl:if test="count(following-siblings::DBE:TableData)=0"> 
    <td>
      <xsl:value-of select="date:add( $deliveryDate, '-P42D')"/>
    </td>
  </xsl:if>
</xsl:template>