我有一个XML文件,我将XSLT 2.0转换为xhtml。该文件有这样一行:
<p>Here I refer to list item number (<lat:listref href="nr"/>) below to tell you about.....</p>
和其他地方,嵌套在同一文件中的其他元素中编号(在CSS中)列表:
<ol>
<li>list item 1</i>
<li>list item 2</i>
<li><span id="nr">list</span> item 3</i>
</ol>
必须将 <lat:listref href="nr"/>
转换为数字3。
到目前为止,我提出了:
<xsl:template match="lat:listref">
<xsl:variable name="l" select="@href"/>
<xsl:number select="//li[*//@id=$l]" level="single"/>
</xsl:template>
我可以不需要变量吗?
答案 0 :(得分:1)
定义一个键:<xsl:key name="k1" match="ol/li/span[@id]" use="@id"/>
。
然后在lat:listref
的模板中,只需执行<xsl:apply-templates select="key('k1', @href)/parent::li" mode="m1"/>
。
最后写一个模板:<xsl:template match="ol/li" mode="m1"><xsl:number/></xsl:template>
答案 1 :(得分:0)
是。使用current() as defined by the XSLT 2.0 specification:
<xsl:template match="lat:listref">
<xsl:value-of select="count(//li[.//@id = current()/@href]/preceding-sibling::li) + 1"/>
</xsl:template>