微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何保留变量值并在XSLT中对其进行更新

如何解决如何保留变量值并在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 举报,一经查实,本站将立刻删除。