Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 循环编号以获取序列_Xslt_Xslt 2.0 - Fatal编程技术网

Xslt 循环编号以获取序列

Xslt 循环编号以获取序列,xslt,xslt-2.0,Xslt,Xslt 2.0,输入XML: <root> <number>4</number> <format>start1</format> <!--this could be start0/start1/alpha --> </root> 4. start1 我的输出应该是: 如果格式=

输入XML:

            <root>
                <number>4</number>
                <format>start1</format>
                <!--this could be start0/start1/alpha   -->
            </root>

4.
start1
我的输出应该是:

如果格式=开始1打印1,2,3,4

如果格式=开始打印0,1,2,3

如果格式=alpha打印A、B、C、D

顺序项的数量等于“编号”节点的值

XSLT存根:

                 <xsl:template match="/">
                    <xsl:variable name="mynumber" select="number"></xsl:variable>
                    <xsl:variable name="mysequence">
                        <xsl:choose>
                            <xsl:when test="format='start0'">
                                <xsl:for-each select="$mynumber">
                                <!--0,1,2,3-->
                                </xsl:for-each>
                            </xsl:when>
                            <xsl:when test="format='start1'">
                                <xsl:for-each select="$mynumber">
                                <!--1,2,3,4-->
                                </xsl:for-each>
                            </xsl:when>
                            <xsl:when test="format='alpha'">
                                <xsl:for-each select="$mynumber">
                                <!--A, B, C, D-->
                                </xsl:for-each>                    
                            </xsl:when>
                        </xsl:choose>
                    </xsl:variable>
                    <xsl:value-of select="$mysequence"></xsl:value-of>        
                </xsl:template>


这是一个可能的解决方案,由于使用了,例如
select=“1到10”



这是一个可能的解决方案,由于使用了,例如
select=“1到10”


考虑以下示例:

XML

<root>
    <item>
        <number>4</number>
        <format>start0</format>
    </item>
    <item>
        <number>4</number>
        <format>start1</format>
    </item>
    <item>
        <number>4</number>
        <format>alpha</format>
    </item>
</root>

考虑以下示例:

XML

<root>
    <item>
        <number>4</number>
        <format>start0</format>
    </item>
    <item>
        <number>4</number>
        <format>start1</format>
    </item>
    <item>
        <number>4</number>
        <format>alpha</format>
    </item>
</root>
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="item">
    <sequence>
        <xsl:choose>
            <xsl:when test="format='start0'">
                <xsl:value-of select="for $i in 1 to number return $i - 1" separator=", "/>
            </xsl:when>
            <xsl:when test="format='start1'">
                <xsl:value-of select="for $i in 1 to number return $i" separator=", "/>
            </xsl:when>
            <xsl:when test="format='alpha'">
                <xsl:value-of select="for $i in 1 to number return codepoints-to-string($i + 64)" separator=", "/>
            </xsl:when>
        </xsl:choose>
    </sequence>
</xsl:template>

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<root>
   <sequence>0, 1, 2, 3</sequence>
   <sequence>1, 2, 3, 4</sequence>
   <sequence>A, B, C, D</sequence>
</root>
<xsl:template match="item">
    <xsl:variable name="fmt" select="format" />
    <sequence>
        <xsl:for-each select="1 to number">
             <xsl:number value="if ($fmt='start0') then . - 1 else ." format="{if ($fmt='alpha') then 'A' else '0'}"/>
             <xsl:if test="position()!=last()">
                <xsl:text>, </xsl:text>
             </xsl:if>
        </xsl:for-each>
    </sequence>
</xsl:template>