在xsl模板中增加计数器变量为每个循环调用

时间:2015-07-25 13:42:14

标签: xslt xslt-1.0

这是我的XMl:         我想像这样打印,编号如图1所示.2。只有“名称”是ABC。我在分配计数器变量并递增它然后在XSLT中检查某个值时遇到了一些困难。     这是我的代码:

{
    "class": "quick_panel_label",
    "fg": [210, 210, 210, 255],
    "match_fg": [126, 199, 239, 255],
    "selected_fg": [255, 255, 255, 255],
    "selected_match_fg": [166, 229, 255, 255]
},

这是XSL样式表:

<Details>
<name>ABC</name>
<EFFECTIVEDATE>2010-04-30</EFFECTIVEDATE>
</Details>
<Details>
<name>EFG</name>
<EFFECTIVEDATE>2010-04-30</EFFECTIVEDATE>
</Details>
<Details>
<name>XYZ</name>
<EFFECTIVEDATE>2022-04-01</EFFECTIVEDATE>
</Details>
<Details>
<name>ABC</name>
<EFFECTIVEDATE>2022-04-01</EFFECTIVEDATE>
</Details>
<Details>
<name>ABC</name>
<EFFECTIVEDATE>2022-04-01</EFFECTIVEDATE>
</Details>

预期结果

<xsl:for-each select="Details">
    </xsl:call-template name="DetaimTemplate">
</xsl:for-each>

<xsl:template name="DetaimTemplate">

</xsl:template> 

如何打印 1.ABC 2.ABC 3.ABC 1.

2 个答案:

答案 0 :(得分:0)

您还没有提到输出是文本还是xml。 假设您期望xml输出,我提供了解决方案。 我从xslt解析器遍历每个Details节点

开始
  <xsl:template match="Details">
    <xsl:if test="name='ABC'">
      <t>
        <xsl:value-of select="count(preceding-sibling::*[name='ABC']) + 1"/>
        <xsl:text>.ABC</xsl:text>
      </t>
    </xsl:if>
  </xsl:template>

答案 1 :(得分:0)

嗯,你可以做到:

<xsl:for-each select="Details[name='ABC']">
   <xsl:value-of select="position()" />
   <xsl:text>. ABC&#10;</xsl:text>
</xsl:for-each>

当然,在它可以工作之前,您还需要一个结构良好的输入,其中包含一个根元素和一个匹配该元素的模板,以便它可以工作。

相关问题