2012-07-20 62 views
0

我在xml中有一個像integer =「1,2,3,4,5」的值。如何計算使用XSLT的總數。從而使輸出給了我5個XSLT計數逗號值計數

問候計數, 山姆

回答

0

這裏有一種方法(可能還有其他)。簡單地翻譯所有逗號爲空字符串,然後在差異比較字符串的長度:

<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

這並不在一個空列表瑣碎的工作情況。您可能需要通過測試進行調整。 – 2012-07-20 07:22:14

+0

好點。我已經添加了另一個例子來處理這個。 – 2012-07-20 07:54:14

+0

謝謝蒂姆。它對我來說非常合適 – sam 2012-07-20 09:07:34

0

如果要算上逗號 - 分隔值,但也可以引用單個項目,您可以使用像這樣的遞歸模板。

這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