/ / XSLT count Kommawerte zählen - xslt, xslt-1.0

XSLT count Kommawerte zählen - xslt, xslt-1.0

Ich habe einen Wert wie integer = "1,2,3,4,5" in der XML. Wie kann ich die Gesamtzahl mit XSLT zählen? Damit gibt mir die Ausgabe eine Zahl von 5

Grüße, Sam

Antworten:

0 für die Antwort № 1

Hier ist ein Weg (es kann andere geben.) Einfach alle Kommas in leere Strings übersetzen und dann im Unterschied in der Länge der Strings vergleichen:

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

Wenn Sie mit leeren Strings umgehen müssen, versuchen Sie es stattdessen

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

0 für die Antwort № 2

Wenn Sie die durch Kommas getrennten Werte zählen möchten, aber auch die einzelnen Elemente referenzieren können, können Sie eine rekursive Vorlage wie diese verwenden.

Dieses XSLT 1.0 Stylesheet konvertiert die kommagetrennten Werte in Knoten und zählt sie dann ...

<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>

... wenn auf dieses Eingabedokument angewendet ...

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

... produziert ...

 5