xslt - 获取节点级别
问题描述
我想<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。
谢谢
解决方案
我认为您需要在这里计算祖先:
<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">
推荐阅读
- python - 如何在点云中获得立方体的对角线?
- go-cd - 向 GoCD 添加内嵌文档
- pandas - 根据其他列中的值设置熊猫数据框中列的值
- google-play-services - 乱扔“GOOGLE PLAY SERVICES ERROR”
- matlab - Matlab 中的示例脚本文件与 Matlab 中的标准脚本不同吗?
- java - 适配器上的 NullPointerException。
在回收站视图中 - java - Spring boot 2 访问 Oauth2 安全资源
- android - React Native 0.60.0 & 0.60.x Android 用于动画 GIF 支持
- bash - 重构时将 awk 输出放入变量中
- python - 删除字符串列表中包含特定字符串的元素