生成对<li> </li>的引用

时间:2014-06-30 19:34:20

标签: css xml xslt-2.0

我有一个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>

我可以不需要变量吗?

2 个答案:

答案 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>