Сумма XML номеров элементов с версией XSL = "1.0" - PullRequest
1 голос
/ 19 января 2020

Как рассчитать сумму номеров элементов XML с XSLT 1.0?
Я попытался выбрать = "sum (str: tokenize (., ',')), К сожалению, я не получил результат.

<numbers>8,8,0,0,0,0,0</numbers> = 16

xml

<documents>
<document>
  <userData>
    <userInfo>
      <user>John</user> 
      <id>1000</id> 
      <date1>10.01.2010</date1> 
      <date2>31.12.2019</date2> 
      <weight>1</weight> 
      <numbers>0,0,0,0,0,0,0</numbers> 
    </userInfo>
    <userInfo>
      <user>Susan</user> 
      <id>1001</id> 
      <date1>01.01.2015</date1> 
      <date2 /> 
      <weight>0.4</weight> 
      <numbers>8,8,0,0,0,0,0</numbers>  
    </userInfo>
  </userData>
</document>
</documents>

1 Ответ

2 голосов
/ 19 января 2020

Попробуйте это:

   <xsl:template match="numbers">
        <xsl:copy>
            <xsl:call-template name="sum">
                <xsl:with-param name="text" select="."/>
                <xsl:with-param name="currentsum" select="0"/>
            </xsl:call-template>
        </xsl:copy>
    </xsl:template>

    <xsl:template name="sum">
        <xsl:param name="text"/>
        <xsl:param name="currentsum"/>
        <xsl:choose>
            <xsl:when test="contains($text, ',')">
                <xsl:variable name="sum" select="number($currentsum) + number(substring-before($text, ','))"/>
                <xsl:call-template name="sum">
                    <xsl:with-param name="text" select="substring-after($text, ',')"/>
                    <xsl:with-param name="currentsum" select="$sum"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="number($currentsum) + number($text)"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

См. Преобразование в https://xsltfiddle.liberty-development.net/3NSTbeK

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...