我想在输入中获得<li>
的水平
输入:
<ol start="1" style="1">
<li>
<p type="List Number Level 1">Text 1.</p>
</li>
<li>
<p type="List Number Level 1">Text 2</p>
<ol start="1">
<liFormat><iRef style="a"/>)<t/></liFormat>
<li>
<p type="List Number Level 2">Text 3.</p>
</li>
<li>
<p type="List Number Level 2">Text 4.</p>
</li>
</ol>
</li>
<li>
<p type="List Number Level 1">Text 5.</p>
</li>
</ol>
输出应为:
<ol start="1" style="1">
<li>
<p type="List_1_First">Text 1.</p>
</li>
<li>
<p type="List_1_First">Text 2</p>
<ol start="1">
<liFormat><liRef style="a"/>)<t/></liFormat>
<li>
<p type="List_2_First">Text 3.</p>
</li>
<li>
<p type="List_2_First">Text 4.</p>
</li>
</ol>
</li>
<li>
<p type="List_1_First">Text 5.</p>
</li>
</ol>
尝试的代码:
<xsl:template match="ol[@start]/li[1]/p[contains(@type,'List')]" priority="30">
<p type="List_{count(li)}_First">
<xsl:apply-templates/>
</p>
</xsl:template>
这里所有的事情都按照我的预期实现了。但是我必须采用li
的级别。例如:List_{li level}_First
。螺母,该标准杆不能正常工作。我已经提到了我尝试过的代码。我正在使用xslt 2.0。
谢谢
答案 0 :(得分:1)
我认为您需要在这里计算祖先:
<tps:p type="List_{count(ancestor::tps:li)}_First">
也许XSLT中还有其他模板,但是当前模板仅与li
下的第一个ol
元素匹配。为了获得预期的输出,也许您需要这样做...
<xsl:template match="tps:ol[@start]/tps:li/tps:p[contains(@type,'List')]" priority="30">