下拉选项XSLT的编号

时间:2013-03-01 15:05:21

标签: xslt xslt-1.0

xslt1.0最好

我有以下xslt代码,该代码是根据所选的productguarantee重新创建的。所以说我选择5我得到以下下拉列表5次。在选择任何超过1的时刻,它将按顺序对每个进行编号。

我想要的是它只对相同的项目进行编号,例如如果B被选中3次,它将是B 1,B 2,B 3。

而棘手的部分是有一个'其他'框,用户可以输入自由文本,所以如果这与另一个框匹配,那么它们将被编号,但我暂时并不担心这部分。

目前您要选择5种产品:

OptionOne 1,OptionOne 2,OptionTwo 3,OptionFour 4,OptionFive 5

我想要的是你只获得倍数的编号,例如

OptionOne 1,Option One 2,OptionTwo,OptionFour,OptionFive

任何帮助非常感谢

代码:

<xsl:if test="productguarantee!=0">
<xsl:for-each select="productguarantees/productguaranteedata">
    <xsl:if test="producttypes/option[@id='A']='selected'">OptionOne</xsl:if>
    <xsl:if test="producttypes/option[@id='B']='selected'">OptionTwo</xsl:if>
    <xsl:if test="producttypes/option[@id='C']='selected'">OptionThree</xsl:if>
    <xsl:if test="producttypes/option[@id='D']='selected'">OptionFour</xsl:if>
    <xsl:if test="producttypes/option[@id='E']='selected'">OptionFive</xsl:if>
    <xsl:if test="producttypes/option[@id='F']='selected'">OptionSix</xsl:if>
    <xsl:if test="producttypes/option[@id='G']='selected'">OptionSeven</xsl:if>
    <xsl:if test="producttypes/option[@id='H']='selected'"><xsl:value-of select="otherprodtypebox"/></xsl:if>
    <xsl:if test="(../../productguarantee)!='1'">
    <xsl:value-of select="position()"/>
    </xsl:if>
    </xsl:for-each>
</xsl:if>

XML:

<productguarantee>0</productguarantee>
    <productguarantees>
        <productguaranteedata id="0">
            <producttypes>
                <option id="A">selected</option>
                <option id="B"/>
                <option id="C"/>
                <option id="D"/>
                <option id="E"/>
                <option id="F"/>
                <option id="G"/>
                <option id="H"/>
            </producttypes>
            <otherprodtypebox/>
        </productguaranteedata>
</productguarantees>

1 个答案:

答案 0 :(得分:1)

以下不是最优雅的解决方案,但时间有限,我发现将您的个人xsl:if语句更改为以下内容:

<xsl:if test="producttypes/option[@id='A']='selected'">
    <xsl:text>OptionOne</xsl:text>
    <xsl:if test="
        preceding-sibling::productguaranteedata[producttypes/option[@id='A']='selected']
        or 
        following-sibling::productguaranteedata[producttypes/option[@id='A']='selected']                    
    ">
        <xsl:value-of select="position()"/>
    </xsl:if>
</xsl:if>

(产品A的示例,您必须相应地更改其他xsl:if语句)

并跳过xsl:如果在循环结束时可能有帮助。

修改

<xsl:if test="producttypes/option[@id='A']='selected'">
    <xsl:text>OptionOne</xsl:text>
    <xsl:if test="
        preceding-sibling::productguaranteedata[producttypes/option[@id='A']='selected']
        or 
        following-sibling::productguaranteedata[producttypes/option[@id='A']='selected']                    
    ">
        <xsl:value-of select="count(preceding-sibling::productguaranteedata[producttypes/option[@id='A']='selected'])+1"/>
    </xsl:if>
</xsl:if>