2016-02-11 126 views
0

我正在比較XSLT中的兩個日期值。值A來自最外面的循環,而值B來自內部的for循環。但是在內部循環中對這些值進行比較總是會讓我錯誤,儘管在打印這些值時我可以看到這些值是相同的。比較兩個來自嵌套for循環的日期值XSLT

源XML:

<root> 
    <fs:Fruits xmlns:fs="http://www.w3.org/2001/XMLSchema/fs"> 
     <fs:Action>CHANGE</fs:Operation> 
     <fs:Fruit_Available_Start_Date>20140607</fs:Fruit_Available_Start_Date> 
     <fs:Fruit_Available_End_Date>20150201</Fruit_Available_End_Date> 
    </fs:Fruits> 
    <fs:Fruits> 
     <fs:Action>NEW</fs:Operation> 
     <fs:Fruit_Available_Start_Date>20150502</fs:Fruit_Available_Start_Date> 
    </fs:Fruits> 
    <fs:Fruits> 
     <fs:Action>NEW</fs:Operation> 
     <fs:Fruit_Available_Start_Date>20150202</fs:Fruit_Available_Start_Date> 
    </fs:Fruits> 
    <fs:Fruits> 
     <fs:Action>CHANGE</fs:Operation> 
     <fs:Fruit_Available_Start_Date>20150402</fs:Fruit_Available_Start_Date> 
     <fs:Fruit_Available_End_Date>20150201</Fruit_Available_End_Date> 
    </fs:Fruits> 
    </root> 

XSL:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fs="http://www.w3.org/2001/XMLSchema/fs" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" 
    version="2.0"> 
    <xsl:output method="text"></xsl:output> 
    <xsl:template match="/"> 

     <xsl:for-each select="//fs:Fruits[fs:Action = 'CHANGE']"> 
      <xsl:sort select="fs:Fruit_Available_End_Date" order="descending"></xsl:sort> 
      <xsl:variable name="FruitAvailableEndDatePluseOneDay" select="xs:date(concat(substring(fs:Fruit_Available_End_Date,1,4),'-',substring(fs:Fruit_Available_End_Date,5,2),'-',substring(fs:Fruit_Available_End_Date,7,2))) + xs:dayTimeDuration('P1D')"></xsl:variable>    
      <xsl:for-each select="//fs:Fruits[fs:Action = 'NEW']"> 
       <xsl:variable name="Fruit_Available_Start_Date" select="xs:date(concat(substring(fs:Fruit_Available_Start_Date,1,4),'-',substring(fs:Fruit_Available_Start_Date,5,2),'-',substring(fs:Fruit_Available_Start_Date,7,2)))"></xsl:variable> 
       <xsl:if test="$Fruit_Available_Start_Date = $FruitAvailableEndDatePluseOneDay"> 
        <xsl:value-of select="hello"></xsl:value-of> 
       </xsl:if> 
      </xsl:for-each> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

輸出是當前爲空

+1

請告訴我們XML輸入,XSLT的相關代碼片段,結果你得到你想要的。 –

+0

除了描述循環外,還展示了展示此行爲的代碼的最小示例。連同示例XML輸入和輸出文檔。幫助:http://stackoverflow.com/help/mcve。 –

+0

我們還需要查看示例輸入數據。 –

回答

2

代替:

<xsl:value-of select="hello"></xsl:value-of> 

其是指命名的一個不存在的元素hello,嘗試:

<xsl:value-of select="'hello'"/> 

或 - 最好是:

<xsl:text>hello</xsl:text>