在 XSL 中引用数字

Referencing figures in XSL

问题: 我正在尝试引用 HTML 文本中的图形,它是一个内部 link 指向图形的标题。

图的 XML 代码和引用是这样的:

(...) As it can be seen in the Figure <p:iref intref="f1"/> (...)

<float:figure id="f1">
     <float:graphic path="f1.jpg"/>
     <float:caption>
         <p:p> Some text </p:p>
     </float:caption> 

处理图形的XSL代码如下:

<xsl:template match="float:figure">
    <a name="{@id}"></a>
    <br/>
    <xsl:apply-templates select="float:graphic"/>
    <br/>
    <center>        
        <b>Figure <xsl:value-of select="count(preceding::float:figure)+1"/> - </b> <xsl:value-of select="float:caption"/>                                                          
    </center>
    <br/>
</xsl:template>

<xsl:template match="//float:graphic">
    <xsl:variable name="path" select="./@path"/>
    <center>
        <img src="{$path}"/>
    </center>        
</xsl:template>

现在,参考数字:

<xsl:template match="p:iref">
    <xsl:variable name="fid" select="@intref"/>
    <xsl:if test="//float:figure/@id=$fid">           
       <a href="#{$fid}"><xsl:value-of select="count(preceding::float:figure)+1"/></a> 
    </xsl:if>
</xsl:template>

问题是:当引用 (intref) 出现在图形之前时,引用工作正常。但是当我想引用已经通过的图像时,虽然 link 工作正常,但它引用了一个不同的数字。

示例:

HTML中的当前结果:

(...) As it can be seen in Figure 1 (...)

       -----------some Figure------------
       Figure 1 - some text

(...) and like we've seen back then, in Figure 2 (...)

HTML 中的预期结果:

(...) As it can be seen in Figure 1 (...)

       -----------some Figure------------
       Figure 1 - some text

(...) and like we've seen back then, in Figure 1 (...)

所以看起来,虽然引用很好(在第一个输出中,如果我单击 link,它是图 2 中的数字 2,它引用了图 1)出现图 2 ...

有什么建议吗?

您需要计算引用图形中的 preceding::float:figure 个元素,而不是引用本身。怎么样:

<xsl:template match="p:iref">
    <xsl:variable name="fid" select="@intref"/>
    <xsl:variable name="target" select="//float:figure[@id=$fid]"/>
    <xsl:if test="$target">
        <a href="#{$fid}"><xsl:value-of select="count($target/preceding::float:figure)+1"/></a> 
    </xsl:if>
</xsl:template>