很抱歉再次问这个问题。当我使用上一个问题的答案时,我遇到了一些问题。假设我的xml是这样的,
<comp>
<section id="1">
<p>text</p>
<figure xml:id="c1-fig-002"/>
<p>text</p>
<figure xml:id="c1-fig-003"/>
</section>
<section id="2">
<p>text</p>
<figure xml:id="c1-fig-003"/>
<figure xml:id="c1-fig-004" resumeNumberingAt="7"/>
<figure xml:id="c1-fig-005"/>
<p>text</p>
</section>
<section id="3">
<p>text</p>
<figure xml:id="c1-fig-006"/>
<figure xml:id="c1-fig-007" resumeNumberingAt="18"/>
<p>text</p>
<figure xml:id="c1-fig-008"/>
<p>text</p>
<figure xml:id="c1-fig-009"/>
</section>
</comp>
我正在使用 xslt 来获得以下结果,
<comp>
<section id="1">
<p>text</p>
<figure xml:id="c1-fig-002"/>
<fignum>2</fignum>
<p>text</p>
<figure xml:id="c1-fig-003"/>
<fignum>3</fignum>
</section>
<section id="2">
<p>text</p>
<figure xml:id="c1-fig-003"/>
<fignum>3</fignum>
<figure xml:id="c1-fig-004" resumeNumberingAt="7"/>
<fignum>7</fignum>
<figure xml:id="c1-fig-005"/>
<fignum>8</fignum>
<p>text</p>
</section>
<section id="3">
<p>text</p>
<figure xml:id="c1-fig-006"/>
<fignum>9</fignum>
<figure xml:id="c1-fig-007" resumeNumberingAt="18"/>
<fignum>18</fignum>
<p>text</p>
<figure xml:id="c1-fig-008"/>
<fignum>19</fignum>
<p>text</p>
<figure xml:id="c1-fig-009"/>
<fignum>20</fignum>
</section>
</comp>
我需要从 fig 之后的数字中获取2
价值c1-fig-002
。
如果有一个属性 resumeNumberingAt 那么我需要使用该值而不是正常值并增加下一个节点的值。我使用以下 xslt 来执行此操作,但它不起作用。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="figure[@resumeNumberingAt != '']">
<xsl:call-template name="fig">
<xsl:with-param name="sequence" select="@resumeNumberingAt"/>
</xsl:call-template>
</xsl:template>
<xsl:template match ="section">
<!--some operation-->
</xsl:template>
<xsl:template match ="p">
<!--some operation-->
</xsl:template>
<xsl:template match="figure" name="fig">
<xsl:param name="sequence" select="substring(@xml:id, 10, 1)"/>
<figure>
<xsl:apply-templates select="@*"/>
<fignum>
<xsl:value-of select="$sequence"/>
</fignum>
</figure>
<xsl:apply-templates select="following-sibling::figure[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>