xslt1.0最好
我有以下xslt代码,它是根据所选择的productguarantee数量重新创建的。假设我选了5,那么下面的下拉框就会出现5次。当任何大于1的元素被选中时,它将依次对它们进行编号。
我想让它只对相同的项目进行编号,例如,如果B被选中3次,它将是b1, b2, b3。
棘手的部分是有一个"其他"框,用户可以在其中输入自由文本,所以如果这与另一个框匹配,那么它们将被编号,但我现在不太担心这部分。
现在假设你选择了5种产品,你将得到:
OptionOne 1, OptionOne 2, OptionTwo 3, OptionFour 4, OptionFive 5
我想要的是你只得到倍数的编号,例如
选项一1,选项一2,选项二,选项四,选项五
任何帮助都非常感谢
代码:<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>
下面不是最优雅的解决方案,但是时间有限,我发现将单个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: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="count(preceding-sibling::productguaranteedata[producttypes/option[@id='A']='selected'])+1"/>
</xsl:if>
</xsl:if>