2016-11-14 2 views
0

Я пытаюсь добавить две переменные в xslt2. Идея должна состояться в следующем месяце (и потенциально увеличивать год, если в прошлом месяце).net.sf.saxon.trans.XPathException: Арифметический оператор не определен для аргументов типов (xs: string, xs: string)

Я использую код ниже:

<?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).

ответ

0

Если вы хотите сделать арифметические операции с датами в XSLT/XPath 2.0 вы можете просто добавить срок до даты, например, чтобы добавить месяц к текущему использованию даты

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

Добавления строк с + не поддерживается в XSLT/XPath, я даже не уверен, ожидаете ли вы, что выполнить конкатенацию строк или сначала конвертировать операнды в числа.

+0

спасибо за ответ и помощь. Функция помогает :) Хороший день. – Vicky