Suponha que eu tenha o seguinte 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>
e eu queria dividir essa lista em três listas com base nos atributos begin
e end
usando XSLT 1.0, de modo que o resultado seja:
<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>
Consegui selecionar a primeira e a terceira lista, mas tive dificuldade em corresponder ao intervalo da lista do meio:
<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>
Tentei várias expressões usando position()
and count()
mas não consegui acertar.
Adendo: os atributos begin
e end
são únicos, ou seja, há exatamente um grupo desse tipo na lista original.