/ / XSLT count count значення коми - xslt, xslt-1.0

Значення коефіцієнта значень XSLT - xslt, xslt-1.0

У мене є значення, як integer = "1,2,3,4,5" в xml. Як я можу підрахувати загальну кількість, використовуючи XSLT. Так що вихід дає мені підрахунок 5

З повагою, Сем

Відповіді:

0 для відповіді № 1

Ось один шлях (може бути й інші). Просто переведіть всі коми в пусті рядки, а потім порівняйте різницю у довжині рядків:

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

Якщо вам потрібно обробляти пусті рядки, спробуйте це замість

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

0 для відповіді № 2

Якщо ви хочете підрахувати значення, розділені комами, але також мати можливість посилатися на окремі елементи, ви можете використовувати рекурсивний шаблон подібний до такого.

Цей стиль XSLT 1.0 перетворить знаки, розділені комами, у вузли, а потім підрахуйте їх ...

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

... при застосуванні до цього вхідного документа ...

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

... виробляє ...

 5