XSLT - 转换日期的条件格式不起作用

XSLT - Conditional formatting of transformed date not working

(使用 XML 1.0)

我正在尝试有条件地格式化 TradeDate 的值:

                    <fo:table-cell padding="1mm" border-width="0.5mm" border-style="none">
                      <fo:block text-align="right" color="{$TradeDateAlert}">
                        <xsl:value-of select="TradeDate"/
                      </fo:block>
                    </fo:table-cell>

XML 文件中的日期格式为:YYYY-MM-DD。

这是我创建的 variable/function:

                  <xsl:variable name="TradeDateAlert" select="10000 * substring(TradeDate, 1, 4) + 100 * substring(TradeDate, 6, 2) + substring(TradeDate, 9, 2)"/>
                  <xsl:choose>
                    <xsl:when test="$TradeDateAlert > 20200401">red</xsl:when>
                    <xsl:otherwise>green</xsl:otherwise>
                  </xsl:choose>

我可以看到使用

可以正确转换日期
 <xsl:value-of select="$TradeDateAlert"/>

编辑:添加 XML 片段

<?xml version="1.0" ?>
<Deals xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <GroupedDeal TicketNumber="20">
    <Tickets>
      <TicketNumber>20</TicketNumber>
      <PartyA>Joe</PartyA>
      <PartyB>Bill</PartyB>
      <PrincipalAmount>100</PrincipalAmount>
      <TradeDate>2020-03-29</TradeDate>
    </Tickets>
  </GroupedDeal>
</Deals>

编辑 #2:完整 XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <xsl:output method="xml" indent="yes"/>

  <xsl:param name="username"></xsl:param>
  <xsl:param name="generatedOnDate"></xsl:param>

  <xsl:template match="/">
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

      <fo:layout-master-set>
        <fo:simple-page-master master-name="table" page-height="11in" page-width="8.5in" margin-top=".5in"
                               margin-bottom=".5in" margin-left=".5in" margin-right=".5in">
          <fo:region-body margin-top="1in" margin-bottom="1in"/>
          <fo:region-before extent=".5in"/>
          <fo:region-after extent=".5in"/>
        </fo:simple-page-master>
      </fo:layout-master-set>

      <fo:page-sequence master-reference="table">

        <fo:static-content flow-name="xsl-region-before" text-align="center">
          <fo:block font-family="Times New Roman" font-size="11pt" font-weight="bold">
            Grouped Deals
          </fo:block>
          <fo:block font-family="Calibri" font-size="10pt" color="purple" text-align="left">
            Generated by 
          <xsl:value-of select="$username" /> on 
          <xsl:value-of select="$generatedOnDate" />
          </fo:block>
        </fo:static-content>

        <fo:static-content flow-name="xsl-region-after">
          <fo:block text-align="right" font-size="9pt">
            Page <fo:page-number/> <!-- of <fo:page-number-citation-last/> -->
          </fo:block>
        </fo:static-content>

        <fo:flow flow-name="xsl-region-body">

          <fo:table-caption>
            <fo:block>
              Any text, intermingled with:
              <fo:block>
                Any text, intermingled with:...
              </fo:block>
            </fo:block>
          </fo:table-caption>
          <fo:table table-layout="fixed" border-width="0.5mm" border-style="none"
                    font-size="10pt" font-style="Calibri" space-before="10pt">
            <fo:table-column column-width="1.5in"/>
            <fo:table-column column-width="1.5in"/>
            <fo:table-column column-width="1.5in"/>
            <fo:table-column column-width="1.5in"/>

            <fo:table-header text-align="center" background-color="silver">
              <fo:table-row>
                <fo:table-cell padding="1mm" border-width="0.5mm" border-style="none">
                  <fo:block font-weight="bold">Party A</fo:block>
                </fo:table-cell>
                <fo:table-cell padding="1mm" border-width="0.5mm" border-style="none">
                  <fo:block font-weight="bold">Party B</fo:block>
                </fo:table-cell>
                <fo:table-cell padding="1mm" border-width="0.5mm" border-style="none">
                  <fo:block font-weight="bold">Principal Amount</fo:block>
                </fo:table-cell>
                <fo:table-cell padding="1mm" border-width="0.5mm" border-style="none">
                  <fo:block font-weight="bold">Trade Date</fo:block>
                </fo:table-cell>
              </fo:table-row>
            </fo:table-header>

            <fo:table-body>

              <xsl:for-each select="Deals/GroupedDeal">


                <fo:table-row>
                  <fo:table-cell>
                    <fo:block>
                      <fo:leader />
                    </fo:block>
                  </fo:table-cell>
                </fo:table-row>

                <fo:table-row background-color="lightgreen" >
                  <fo:table-cell padding="1mm" border-width="0.5mm" border-style="none" >
                    <fo:block font-style="bold">
                      Ticket #:
                      <xsl:value-of select="@TicketNumber"/>
                    </fo:block>
                  </fo:table-cell>
                </fo:table-row>
                <xsl:for-each select="Tickets">

                  <xsl:variable name="bgclr">
                    <xsl:choose>
                      <xsl:when test="position() mod 2">#EDF2F8 </xsl:when>
                      <xsl:otherwise>#A7BFDE</xsl:otherwise>
                    </xsl:choose>
                  </xsl:variable>

                  <xsl:variable name="pamountColor">
                    <xsl:choose>
                      <xsl:when test = "PrincipalAmount > 100000">blue</xsl:when>
                      <xsl:otherwise>black</xsl:otherwise>
                    </xsl:choose>
                  </xsl:variable>

                  <xsl:variable name="partyBAlert">
                    <xsl:choose>
                      <xsl:when test = "PartyB = 'LAZARD-TK6258'">red</xsl:when>
                      <xsl:otherwise>black</xsl:otherwise>
                    </xsl:choose>
                  </xsl:variable>

                  <!--Trade Date format: 2020-03-29-->
                  <xsl:variable name="TradeDateAlert" select="10000 * substring(TradeDate, 1, 4) + 100 * substring(TradeDate, 6, 2) + substring(TradeDate, 9, 2)"/>
                  <xsl:choose>
                    <xsl:when test="$TradeDateAlert > 20200401">red</xsl:when>
                    <xsl:otherwise>green</xsl:otherwise>
                  </xsl:choose>

                  <fo:table-row background-color="{$bgclr}">

                    <fo:table-cell padding="1mm" border-width="0.5mm" border-style="none">
                      <fo:block>
                        <xsl:value-of select="PartyA"/>
                      </fo:block>
                    </fo:table-cell>
                    <fo:table-cell padding="1mm" border-width="0.5mm" border-style="none">
                      <fo:block color="{$partyBAlert}">
                        <xsl:value-of select="PartyB"/>
                      </fo:block>
                    </fo:table-cell>
                    <fo:table-cell padding="1mm" border-width="0.1mm" border-style="none" >
                      <fo:block text-align="right" color="{$pamountColor}">
                        <xsl:value-of select="format-number(PrincipalAmount, '$#,##0.00')"/>
                      </fo:block>
                    </fo:table-cell>

                    <fo:table-cell padding="1mm" border-width="0.5mm" border-style="none">
                      <fo:block text-align="right" color="{$TradeDateAlert}">
                        <xsl:value-of select="TradeDate"/>
                        <!--<xsl:value-of select="$TradeDateAlert"/>-->
                      </fo:block>
                    </fo:table-cell>

                  </fo:table-row>
                </xsl:for-each>
              </xsl:for-each>
            </fo:table-body>

          </fo:table>


        </fo:flow>

      </fo:page-sequence>

    </fo:root>
  </xsl:template>
</xsl:stylesheet>

我做错了什么?

谢谢,

我猜不是

              <xsl:variable name="TradeDateAlert" select="10000 * substring(TradeDate, 1, 4) + 100 * substring(TradeDate, 6, 2) + substring(TradeDate, 9, 2)"/>
              <xsl:choose>
                <xsl:when test="$TradeDateAlert > 20200401">red</xsl:when>
                <xsl:otherwise>green</xsl:otherwise>
              </xsl:choose>

你想要第二个变量

              <xsl:variable name="TradeDateAlert" select="10000 * substring(TradeDate, 1, 4) + 100 * substring(TradeDate, 6, 2) + substring(TradeDate, 9, 2)"/>
              <xsl:variable name="trade-alert-color">
                <xsl:choose>
                  <xsl:when test="$TradeDateAlert > 20200401">red</xsl:when>
                  <xsl:otherwise>green</xsl:otherwise>
                </xsl:choose>
              </xsl:variable>

然后当然使用<fo:block text-align="right" color="{$trade-alert-color}">