是否有办法处理元素<list_x>
,具体取决于preceding-sibling
轴上某些节点的位置?
XML代码:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<text/>
<text/>
<text/>
<list_num_start/>
<list_num/>
<list_num/>
<list_x/>
<text/>
<text/>
<text/>
<list_square_start/>
<list_square/>
<list_square/>
<list_x/>
</root>
模板:
<xsl:template match="list_x">
<xsl:element name="li">
<xsl:attribute name="class"><xsl:value-of select="name()"/></xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
<xsl:choose>
<xsl:when test="position(preceding-sibling::list_num_start[last()]) < position(preceding-sibling::list_square_start[last()])">
<xsl:text disable-output-escaping="yes"></ol></xsl:text>
</xsl:when>
<xsl:otherwise>...</xsl:otherwise>
</xsl:choose>
</xsl:template>
不幸的是position()
不允许任何参数。
输出应为:
<root>
<text/>
<text/>
<text/>
<ol>
<li class="list_num_start"/>
<li class="list_num"/>
<li class="list_num"/>
<li class="list_x"/>
</ol>
<text/>
<text/>
<text/>
<ul>
<li class="list_square_start"/>
<li class="list_square"/>
<li class="list_square"/>
<li class="list_x"/>
</ul>
</root>
答案 0 :(得分:1)
您可以尝试:
<xsl:when test="count(preceding-sibling::list_num_start[1]/preceding-sibling::*) <
count(preceding-sibling::list_square_start[1]/preceding-sibling::*)">
这会在您要查找的元素之前对元素进行计数。
我将list_num_start[last()]
更改为list_num_start[1]
,因为我假设您正在寻找当前的元素list_num_start。