我想在这里计算列表级别。
<list> <---level 1
<list> <---level 2
<list></list> <---level 3
</list>
</list>
答案 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>
</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>