如何保留一个变量值并在XSLT中更新它
问题描述:
我有一个称为ID的属性,每当该值被分配给它时,它就会加1。我有一种情况,每次输入循环时都会增加值。外部循环有2条记录,内部循环有3条记录。如何保留一个变量值并在XSLT中更新它
外环1 - 内环1,2,和3中,ID属性被递增为1,2和3,但
外环2 - 内环....再次ID属性开头1.我需要这是4,5等......
此增量ID没有与输入XML文件相关的数据。所有的处理都必须在XSLT中完成。
XSLT文件:
<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>
请帮帮我在打印时内环环绕对于外环1的3倍和外环2和当内环为1 ID 4的值, ID值应为4个。截至目前,它的再次印刷1 ..
ID 1
ID 2
ID 3
----------
ID 1(it should print 4)
我使用XSLT 1.0
谢谢 拉姆
答
您正在使用position()
函数来确定其父元素(本例中为Observation
)的本地ID。如果你真的想要一个全球的节点,那么你可以做一些像count(preceding::Roles) + 1
这样的事情,它会在当前节点之前统计所有Roles
节点,然后添加一个节点。
您可能需要限制preceding::Roles
谓词远一点根据您的要求,如preceding::Roles[parent::Observation]
例如,要确保你只计算Roles
元素是一个Observation
元素的子元素。
答
显示源文件总是有用的。但我怀疑你可以用类似
<xsl:attribute name="ID">
<xsl:number level="any" from="Solution"/>
</xsl:attribute>
+1这个特定任务的XSLT intruction得到你想要的结果。 – 2011-04-14 16:30:25