假设我有以下 XML:
<?xml version="1.0" encoding="utf8"?>
<test>
<list>
<li>a</li>
<li>a</li>
<li begin="true">b</li> <!-- begin of the "b" list -->
<li>b</li>
<li>b</li>
<li end="true">b</li> <!-- end of the "b" list -->
<li>c</li>
<li>c</li>
</list>
</test>
我想使用 XSLT 1.0 根据begin
和end
属性将此列表拆分为三个列表,结果如下:
<list>
<li>a</li>
<li>a</li>
</list>
<list>
<li>b</li>
<li>b</li>
<li>b</li>
<li>b</li>
</list>
<list>
<li>c</li>
<li>c</li>
</list>
我设法选择了第一个和第三个列表,但在匹配中间列表的范围时遇到了困难:
<xsl:template match="list">
<list>
<xsl:apply-templates select="li[@begin = 'true']/preceding-sibling::li" />
</list>
<list>
<xsl:apply-templates select="li[...]" /> <!-- Hmm 🤔 -->
</list>
<list>
<xsl:apply-templates select="li[@end = 'true']/following-sibling::li" />
</list>
</xsl:template>
position()
我尝试使用和进行各种表达,count()
但都不能完全正确。
附录:属性begin
和end
是唯一的,即原始列表中恰好有一个这样的组。