比较来自嵌套for循环的两个日期值在XSLT中

时间:2016-02-11 20:12:44

标签: xml xslt transform

我正在比较XSLT中的两个日期值。值A来自最外层循环,值B来自内部的for循环。但是在内部循环中对这些值进行比较总是会给我带来错误的结果,尽管在打印这些值时,我可以看到它们是相同的。

源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 个答案:

答案 0 :(得分:2)

而不是:

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

指的是名为hello的不存在的元素,请尝试:

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

或 - 最好:

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