Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 获取计数器的最后一个匹配项_Xslt_Xslt 2.0 - Fatal编程技术网

Xslt 获取计数器的最后一个匹配项

Xslt 获取计数器的最后一个匹配项,xslt,xslt-2.0,Xslt,Xslt 2.0,以我的xml文件为例: <Record> <AA bac="1" kjd="Same"/> <BB dfd="02" dad="342"/> <CC pod="11-A" dsd="11-B"/> <CC pod="22-A" dsd="22-B"/> <CC pod="33-A" dsd="33-B"/> <CC pod="44-A" dsd="44-B"/> <

以我的xml文件为例:

<Record>
   <AA bac="1" kjd="Same"/>
   <BB dfd="02" dad="342"/>
   <CC pod="11-A" dsd="11-B"/>
   <CC pod="22-A" dsd="22-B"/>
   <CC pod="33-A" dsd="33-B"/>
   <CC pod="44-A" dsd="44-B"/>
   <CC pod="55-A" dsd="55-B"/>
   <CC pod="66-A" dsd="66-B"/>
   <CC pod="77-A" dsd="77-B"/>
</Record>

我需要在元素CC下添加另一个属性(cnt),它是CC每出现3次的计数器。如果它达到4,我需要增加它。我已经完成了这一部分,但我需要在CC中获取@cnt的最后一个值,并将其放置在AA中属性的一个新(@cnt_1)中

这是我的xslt:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="Record">
    <xsl:copy>
        <xsl:apply-templates select="* except CC"/>
        <xsl:for-each-group select="CC" group-adjacent="(position() - 1) idiv 3">
            <xsl:apply-templates select="current-group()">
                <xsl:with-param name="group-pos" select="position()"/>
            </xsl:apply-templates>
        </xsl:for-each-group>
    </xsl:copy>
</xsl:template>
<xsl:template match="CC">
    <xsl:param name="group-pos"/>
    <CC cnt="{$group-pos}" seq="{position()}">
        <xsl:apply-templates select="@*"/>
    </CC>
</xsl:template>
<xsl:template match="CC/@*[not(normalize-space())]"/>
<xsl:template match="BB/@*[not(normalize-space())]" />
<xsl:template match="AA/@*[not(normalize-space())]" />

预期产出:

<Record>
   <AA cnt_1="3" bac="1" kjd="Same"/>
   <BB dfd="02" dad="342"/>
   <CC cnt="1" seq="1" pod="11-A" dsd="11-B"/>
   <CC cnt="1" seq="2" pod="22-A" dsd="22-B"/>
   <CC cnt="1" seq="3" pod="33-A" dsd="33-B"/>
   <CC cnt="2" seq="1" pod="44-A" dsd="44-B"/>
   <CC cnt="2" seq="2" pod="55-A" dsd="55-B"/>
   <CC cnt="2" seq="3" pod="66-A" dsd="66-B"/>
   <CC cnt="3" seq="1" pod="77-A" dsd="77-B"/>
</Record>

谢谢

那么:

<xsl:template match="AA">
    <xsl:copy>
        <xsl:attribute name="cnt_1" select="ceiling(count(../CC ) div 3)"/>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

非常感谢您!