【发布时间】:2019-01-08 09:03:15
【问题描述】:
我有一个 xml 文件:
<ul class="ul">
<li class="li">UL LI 1</li>
<li class="li">UL LI 2</li>
<li class="li">UL LI 3
<ol class="ol">
<li class="li">OL LI 1</li>
<li class="li">OL LI 2
<ul>
<li class="li">UL LI 1</li>
<li class="li">UL LI 2
<ol class="ol">
<li class="li">OL LI 1</li>
<li class="li">OL LI 2
<ol class="ol">
<li class="li">OL LI 1</li>
<li class="li">OL LI 2</li>
<li class="li">OL LI 3</li>
</ol>
</li>
</ol>
</li>
</ul>
</li>
</ol>
</li>
我想要实现的是这样的:
- UL LI 1
- UL LI 2
-
UL LI 3
- OL李1
-
OL李2
- UL LI 1
-
UL LI 2
- OL李1
-
OL李2
2.1 OL李1
2.2 OL李2
2.3 OL李3
如果ol的父级是ul,我想重置编号,否则编号必须从它的父级继承。我如何在 xslt 中做到这一点?
我确实尝试使用此代码解决此问题:
<xsl:variable name="ol.parent" select="parent::*/parent::*/parent::*[contains(@class, ' ol ')]"/>
<xsl:choose>
<xsl:when test="not(empty($ol.parent))">
<xsl:number level="multiple" select="$ol.parent/ancestor-or-self::*[contains(@class, ' ol ')]" count="*[contains(@class, ' li ')]" format="1."/>
</xsl:when>
<xsl:otherwise>
<xsl:number level="multiple" from="*[(contains(@class, ' ol ') or contains(@class, ' li '))]" format="1."/>
</xsl:otherwise>
</xsl:choose>
但是有序列表不继承多级数。它总是从一个开始。
【问题讨论】:
-
如果代码使用了只存在于 XSLT/XPath 2 及更高版本中的
empty函数,为什么它会被标记为 [xslt-1.0]? -
@MartinHonnen,谢谢..修复它。
-
@NikkuKahel 批准的解决方案和相关的 cmets 显然有效。我只是有一个相关的问题:层次结构有 OL 和 UL,我只在接受的答案中看到 OL 的规则。可能我可以看到完整的 xsl 显示如何为整个列表(OL 和 UL)生成编号?