XSLT数字序列到范围

时间:2017-11-29 18:48:50

标签: xslt range sequence

在XSLT(2.0首选)中,如何将数组中的数字序列转换为数字范围,例如。 import scipy import pdb;pdb.set_trace() print(scipy) print(dir(scipy)) <a>1, 2, 3, 6, 7, 9</a>

1 个答案:

答案 0 :(得分:2)

您只需使用for-each-group select="$sequence" group-adjacent="xs:integer(.) - position()"

即可
<xsl:template match="a">
    <xsl:copy>
        <xsl:value-of separator=", ">
            <xsl:for-each-group select="tokenize(., ',\s*')"
                group-adjacent="xs:integer(.) - position()">
                <xsl:sequence
                    select="
                        if (not(current-group()[2])) then
                            .
                        else
                            concat(., '-', current-group()[last()])"/>
            </xsl:for-each-group>
        </xsl:value-of>
    </xsl:copy>
</xsl:template>

变换

<a>1, 2, 3, 6, 7, 9</a>

进入

<a>1-3, 6-7, 9</a>