使用XSL计算字符串

时间:2017-10-02 15:39:47

标签: xml xslt

有没有办法计算使用XSL(ver = 1.0)在不同文本节点中包含其他节点中的字符串数量?我有以下xml,需要计算给定文本中出现的颜色数量。输出应为:

Color counts: 2 (white, gold)
Color counts: 2 (red, yellow)

xml看起来像:

<items>
    <colors>
     <color>red</color>
     <color>yellow</color>
     <color>blue</color>
     <color>white</color>
     <color>purple</color>
     <color>gold</color>
     <color>silver</color>
    </colors>
    <item>
        <text>
            Mr. Johnson prefers a white with gold logo truck.
        </text>
        <text>
            Mr. Johnson prefers a red with logo yellow truck.
        </text>
    </item>
</items>

1 个答案:

答案 0 :(得分:1)

沿着这些方向尝试:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>

<xsl:template match="/items">
    <xsl:for-each select="item/text">
        <xsl:variable name="colors" select="../../colors/color[contains(current(), .)]" />
        <xsl:text>Color counts: </xsl:text>
        <xsl:value-of select="count($colors)"/>
        <xsl:text> (</xsl:text>
        <xsl:for-each select="$colors">
            <xsl:value-of select="."/>
            <xsl:if test="position()!=last()">
                <xsl:text>, </xsl:text>
            </xsl:if>
        </xsl:for-each>
        <xsl:text>)&#10;</xsl:text>  
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>