获取列表级别并将其用作XSLT中的参数

时间:2019-06-15 14:59:53

标签: xslt xpath

我想在这里计算列表级别。

<list>                 <---level 1
  <list>               <---level 2
    <list></list>      <---level 3
  </list>
</list>

1 个答案:

答案 0 :(得分:0)

因为您引用了xsl:sequence,所以我认为您可以使用XSLT-2.0或更高版本。因此,您可以将模板简化为以下内容:

<xsl:template match="list-item[normative]//p" priority="150">
    <xsl:variable name="labelno" select="count(ancestor::list)"/>
    <p type="{if (matches(.,'[\d]\.[\d]')) then concat('Note indent ', $labelno) 
              else concat('List Number ', $labelno)}">
        <xsl:value-of select="."/>
    </p>
    <xsl:text>&#xa;</xsl:text>
</xsl:template>

要确定在type属性中使用什么字符串,它将使用RegEx函数matches检查以点分隔的小数。缩进级别是通过计算<list>个祖先来确定的。

其输出为:

<p type="List Number 1">Paragraph 1</p>
<p type="Note indent 1">Paragraph 1.1</p>
<p type="List Number 2">Paragraph 2</p>
<p type="Note indent 2">Paragraph 2.1</p>