我想根据xsl:for-each循环中的索引编写一些逻辑 例如。
<xsl:for-each select="address">
<if index is 0>
<EPAPARTMENT1> <xsl:value-of select="value" /> </EPAPARTMENT1>
<if>
<if index is 1>
<EPDEPARTMENT2> <xsl:value-of select="value" /> </EPDEPARTMENT2>
<if>
</xsl:for-each>
请解释一下,如何在xsl:for-each循环中获取索引值以及如何在xsl中使用它:if
感谢。
答案 0 :(得分:4)
当您遍历节点集时,可以使用position()
函数返回节点集中的当前索引。请注意,此索引是从1开始的。所以在你的情况下你会写一些类似的东西:
<xsl:for-each select="address">
<xsl:if test="position() = 1">
<EPAPARTMENT1> <xsl:value-of select="value" /> </EPAPARTMENT1>
</xsl:if>
<xsl:if test="position() = 2">
<EPDEPARTMENT2> <xsl:value-of select="value" /> </EPDEPARTMENT2>
</xsl:if>
</xsl:for-each>
答案 1 :(得分:1)
或者,如果要输出的元素名称超过2个,则可以使用xsl:element
以编程方式创建新元素。
<xsl:for-each select="//address">
<xsl:variable name="p" select="position()" />
<xsl:element name="EPAPARTMENT{$p}">
<xsl:value-of select="value" />
</xsl:element>
</xsl:for-each>
<xml>
<address><value>AAA</value></address>
<address><value>BBB</value></address>
<address><value>CCC</value></address>
<address><value>DDD</value></address>
</xml>
<EPAPARTMENT1>AAA</EPAPARTMENT1>
<EPAPARTMENT2>BBB</EPAPARTMENT2>
<EPAPARTMENT3>CCC</EPAPARTMENT3>
<EPAPARTMENT4>DDD</EPAPARTMENT4>