2009-09-10 12 views
0

J'ai défini le modèleComment faire le calcul pour une date

<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> 

Maintenant, je veux calculer « LatestOrderDate » = « DeliveryDate » - 42 jours. Comment dois-je faire?

+0

esprit pour formater correctement votre modèle (utilisez "Exemple de code" pour xml/xsl code afin que nous puissions voir les caractères spéciaux)? –

Répondre

0

Vous devriez être un peu plus verbeux. Si vous devez rester avec XSLT 1.0 Je recommanderais EXSLT http://www.exslt.org ou les exemples de code à partir du 1er « XSLT livre de recettes » édition Sal Mangano, publié par O'Reilly voir www.oreilly.de/catalog/9780596003722/

Si je comprends à droite, la première colonne contient la date de livraison et la dernière date sera enregistrée dans une nouvelle colonne de droite. Le contenu de toutes les autres colonnes sera copié textuellement à la sortie.

L'idée est d'interroger d'abord le contenu de la première colonne et de l'enregistrer dans la variable deliveryDate. Ensuite, les éléments enfant TableData seront traités. Lorsque vous atteignez le dernier élément TableData, une nouvelle cellule de tableau sera ajoutée à chaque ligne de table contenant le résultat de lastOrderDate calculé.

Voir l'exemple de code dans ma deuxième réponse.

+0

J'utilise XSLT 1.0 et la date est définie de façon - 2009-09-22 –

+0

En utilisant EXSLT, vous pouvez utiliser le modèle de fonction date: add() pour obtenir ce que vous voulez. Date: add ($ deliveryDate, '-P42D') où -P42D est un littéral xsd: durée pour la période de 42 jours désirée pointant vers l'arrière dans le passé. –

+0

Pouvez-vous donner un exemple pour le faire? –

0

"Exemple de code"

 
<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> 
Questions connexes