我试图从参考图中确定当前章节中包含的图号。
要求:
<figure_reference>
可能出现在任何深度。XML:
<top>
<chapter>
<dmodule>
<paragraph>
<figure>figure</figure>
</paragraph>
<figure>figure</figure>
</dmodule>
</chapter>
<chapter>
<dmodule>
<figure>figure</figure>
<paragraph>
<figure>figure</figure>
</paragraph>
</dmodule>
<dmodule>
<figure>figure</figure>
<paragraph>
<figure>figure</figure>
<paragraph>
<figure>figure</figure>
</paragraph>
</paragraph>
<figure_reference id="c"/>
<figure id="c">figure</figure>
</dmodule>
</chapter>
</top>
XSL:
<xsl:template match="figure_reference">
<xsl:value-of select="count(ancestor::dmodule//figure[@id = current()/@id]/preceding::figure)+1"/>
</xsl:template>
当前计数结果: 8
所需的计数结果: 6
答案 0 :(得分:4)
试试这个模板:
<xsl:template match="figure_reference">
<xsl:value-of select="count(ancestor::chapter//figure[@id=current()/@id]/preceding::figure[ancestor::chapter = current()/ancestor::chapter])+1"/>
</xsl:template>
答案 1 :(得分:2)
另一种方法不需要使用<xsl:number>
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="kFigById" match="figure" use="@id"/>
<xsl:template match="figure_reference">
<xsl:for-each select="key('kFigById', @id)">
<xsl:number level="any" count="chapter//figure"
from="chapter"/>
</xsl:for-each>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
将此转换应用于提供的XML文档时:
<top>
<chapter>
<dmodule>
<paragraph>
<figure>figure</figure>
</paragraph>
<figure>figure</figure>
</dmodule>
</chapter>
<chapter>
<dmodule>
<figure>figure</figure>
<paragraph>
<figure>figure</figure>
</paragraph>
</dmodule>
<dmodule>
<figure>figure</figure>
<paragraph>
<figure>figure</figure>
<paragraph>
<figure>figure</figure>
</paragraph>
</paragraph>
<figure_reference id="c"/>
<figure id="c">figure</figure>
</dmodule>
</chapter>
</top>
产生了想要的正确结果:
6