net.sf.saxon.trans.XPathException:没有为类型的参数定义算术运算符(xs:string,xs:string)

时间:2016-11-14 15:25:49

标签: variables xslt-2.0

我想在xslt2中添加两个变量。想法是下个月(如果是上个月,可能会增加年份)。

我使用的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xdt="http://www.w3.org/2005/02/xpath-datatypes" exclude-result-prefixes="xsl xs fn xdt">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <xsl:param name="filter_date"/>

    <xsl:variable name="Current_Date">
        <xsl:choose>
            <xsl:when test="$filter_date">
                <xsl:value-of select="$filter_date"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="format-date(current-date(), '[Y0001][M01][D01]')"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:variable>

    <xsl:variable name="Current_Month" select="substring($Current_Date,5,2)"/>
    <xsl:variable name="Current_Year" select="substring($Current_Date,1,4)"/>
    <xsl:variable name="One">1</xsl:variable>

    <xsl:variable name="Month">
        <xsl:choose>
            <xsl:when test="$Current_Month = '12'">
                <xsl:text>01</xsl:text>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$Current_Month + '0' + $One"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:variable>

    <xsl:variable name="Year">
        <xsl:choose>
            <xsl:when test="$Current_Month = '12'">
                <xsl:value-of select="sum($Current_Year + $One)"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$Current_Year"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:variable>

    <out>
        <xsl:value-of select="concat($Year, $Month, '20')" />
    </out>

</xsl:template>

但是我收到了错误

  

net.sf.saxon.trans.XPathException:没有为类型的参数定义算术运算符(xs:string,xs:string)。

1 个答案:

答案 0 :(得分:0)

如果你想在XSLT / XPath 2.0中进行日期算术,你只需在日期中添加一个持续时间,例如在当前日期添加一个月使用

<xsl:value-of select="current-date() + xs:yearMonthDuration('P1M')"/>

在XSLT / XPath中不支持使用+添加字符串,我甚至不确定您是希望执行字符串连接还是首先将操作数转换为数字。