/ / Contagem de valores de vírgula de contagem XSLT - xslt, xslt-1.0

Contagem de valores de vírgula de contagem XSLT - xslt, xslt-1.0

Eu tenho um valor como integer = "1,2,3,4,5" no xml. Como posso contar o número total usando XSLT. Então, a saída me dá uma contagem de 5

Saudações, Sam

Respostas:

0 para resposta № 1

Aqui está um caminho (pode haver outros). Simplesmente traduza todas as vírgulas em cadeias vazias e, em seguida, compare a diferença no comprimento das cadeias de caracteres:

<xsl:value-of
select="string-length(@integer)
- string-length(translate(@integer, ",", "")) + 1" />

Se você precisa lidar com strings vazias, tente isso

<xsl:value-of
select="string-length(@integer)
- string-length(translate(@integer, ",", ""))
+ 1 * (string-length(@integer) != 0)" />

0 para resposta № 2

Se você quiser contar os valores separados por vírgulas, mas TAMBÉM poder referenciar os itens individuais, você pode usar um modelo recursivo como esse.

Esta folha de estilo XSLT 1.0 irá converter os valores separados por vírgula em nós e, em seguida, contá-los ...

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:output method="text"/>

<xsl:template match="/">
<xsl:variable name="as-nodes">
<xsl:call-template name="parse-comma-separated-values">
<xsl:with-param name="csv" select="t/@csv" />
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="count(msxsl:node-set($as-nodes)/*)" />
</xsl:template>

<xsl:template name="parse-comma-separated-values">
<xsl:param name="csv" />
<xsl:choose>
<xsl:when test="$csv = """/>
<xsl:when test="not( contains( $csv, ","))">
<value-node value="{$csv}" />
</xsl:when>
<xsl:otherwise>
<value-node value="{substring-before($csv,",")}" />
<xsl:call-template name="parse-comma-separated-values">
<xsl:with-param name="csv" select="substring-after($csv,",")"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>

... quando aplicado a este documento de entrada ...

 <t csv="1,2,3,4,5"/>

... produz ...

 5