另一种方法是从匹配第一个fig元素开始
<xsl:apply-templates select="fig[1]"/>
然后你有一个主模板来匹配无花果元素,但有一个参数将保存“递增”值。请注意,它还充当命名模板。
<xsl:template match="fig" name="fig">
<xsl:param name="sequence" select="1"/>
在此您可以输出您的fignum元素
<fignum>
<xsl:value-of
select="concat(substring-before(substring(@xml:id, 2, string-length(@xml:id) - 1), '-'), '.', $sequence)"/>
</fignum>
然后你会匹配下一个无花果元素,增加参数的值
<xsl:apply-templates select="following-sibling::fig[1]">
<xsl:with-param name="sequence" select="$sequence + 1"/>
</xsl:apply-templates>
要重置序列,您只需有一个与具有相关属性的fig元素匹配的模板,您只需调用具有属性值的命名模板即可覆盖它
<xsl:template match="fig[@resumeatnum != '']">
<xsl:call-template name="fig">
<xsl:with-param name="sequence" select="@resumeatnum"/>
</xsl:call-template>
</xsl:template>
这是完整的 XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="comp">
<comp>
<xsl:apply-templates select="fig[1]"/>
</comp>
</xsl:template>
<xsl:template match="fig[@resumeatnum != '']">
<xsl:call-template name="fig">
<xsl:with-param name="sequence" select="@resumeatnum"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="fig" name="fig">
<xsl:param name="sequence" select="1"/>
<fig>
<xsl:apply-templates select="@*"/>
<fignum>
<xsl:value-of select="concat(substring-before(substring(@xml:id, 2, string-length(@xml:id) - 1), '-'), '.', $sequence)"/>
</fignum>
</fig>
<xsl:apply-templates select="following-sibling::fig[1]">
<xsl:with-param name="sequence" select="$sequence + 1"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于您的示例 XML 时,将输出以下内容
<comp>
<fig xml:id="c1-fig-001">
<fignum>1.1</fignum>
</fig>
<fig xml:id="c1-fig-002">
<fignum>1.2</fignum>
</fig>
<fig xml:id="c1-fig-003">
<fignum>1.3</fignum>
</fig>
<fig xml:id="c1-fig-004" resumeatnum="7">
<fignum>1.7</fignum>
</fig>
<fig xml:id="c1-fig-005">
<fignum>1.8</fignum>
</fig>
<fig xml:id="c1-fig-006">
<fignum>1.9</fignum>
</fig>
<fig xml:id="c1-fig-007" resumeatnum="18">
<fignum>1.18</fignum>
</fig>
<fig xml:id="c1-fig-008">
<fignum>1.19</fignum>
</fig>
<fig xml:id="c1-fig-009">
<fignum>1.20</fignum>
</fig>
</comp>