我有一个名为ID的属性,每次将值赋值给它时都会递增1。我的情况是每次输入循环时要递增的值。外循环有2条记录,内循环有3条记录。
外循环1 - 内循环1,2和3,ID属性增加为1,2和3,但
外循环2 - 内循环....再次ID属性从1开始。我需要这个是4,5等等..
此增量ID没有与输入XML文件相关的数据。所有处理都必须在XSLT中完成。
XSLT FIle:
<xsl:variable name="localISYMPid" select="0"/>
<xsl:element name="Test1">
<xsl:for-each select="Solutions/Solution">
<xsl:if test="Observations/Observation!= '' ">
<xsl:for-each select="Observations/Observation">
<xsl:element name="Roles">
<!-- Generating the ID value -->
<xsl:variable name="ids" select="generate-id(.)"/>
<!-- ***************************-->
<xsl:attribute name="CK"><xsl:value-of select="substring-after($ids,'Solution')"/></xsl:attribute>
<xsl:attribute name="ID"><xsl:value-of select="position() + $localISYMPid "/></xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:element>
请帮我打印ID 4的值,因为当内循环为外循环1和外循环2循环3次时,当内循环为1时,ID值应为4。现在,再打印1 ..
ID 1
ID 2
ID 3
----------
ID 1(it should print 4)
我正在使用XSLT 1.0
谢谢你, 拉姆
答案 0 :(得分:2)
显示源文档总是很有用。但我怀疑你可以用
之类的东西达到你想要的效果<xsl:attribute name="ID">
<xsl:number level="any" from="Solution"/>
</xsl:attribute>
答案 1 :(得分:0)
您正在使用position()
函数来确定其父元素(在本例中为Observation
)的本地ID。如果你真的想要一个全局的,那么你可以做一些像count(preceding::Roles) + 1
这样的事情,它将计算当前节点之前的所有Roles
个节点,然后加一个节点。
您可能需要根据您的要求进一步限制preceding::Roles
谓词,例如preceding::Roles[parent::Observation]
,以确保您只计算Roles
元素Observation
元素的子元素。