我已经定义了模板
<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天。 我该怎么办?
答案 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>