如何解决如何保留变量值并在XSLT中对其进行更新
|| 我有一个称为ID的属性,每次将其赋值给它时都会递增1.我有一种情况是每次进入循环时都要递增值。外循环有2条记录,内循环有3条记录。 外循环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>
请帮助我打印ID 4的值,例如,当内循环为外循环1和外循环2循环3次,并且当内循环为1时,ID值为4。截至目前,其打印为1再次..
ID 1
ID 2
ID 3
----------
ID 1(it should print 4)
我正在使用XSLT 1.0
谢谢,
拉姆
解决方法
显示您的原始文件总是很有用的。但我怀疑您可以通过以下方式实现您想要的
<xsl:attribute name=\"ID\">
<xsl:number level=\"any\" from=\"Solution\"/>
</xsl:attribute>
,您正在使用position()
函数来确定其父元素本地的ID(在本例中为Observation
)。如果您确实想要一个全局节点,则可以执行count(preceding::Roles) + 1
这样的操作,它将在当前节点之前计算所有Roles
个节点,然后再添加一个。
根据您的要求,可能需要进一步限制preceding::Roles
谓词,例如preceding::Roles[parent::Observation]
,以确保您只计算Roles
元素,而Roles
元素是Observation
元素的子元素。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。