Predicados aninhados XPath / XSLT: como obter o contexto do predicado externo?
Parece que esta questão não foi discutida anteriormente sobre stackoverflow, salve paraTrabalhando com predicados XPath aninhados ... Refinado onde a solução que não envolve predicados aninhados foi oferecid
Então, tentei escrever uma amostra simplificada do que gostaria de obter:
Entrada
<root>
<shortOfSupply>
<food animal="doggie"/>
<food animal="horse"/>
</shortOfSupply>
<animalsDictionary>
<cage name="A" animal="kittie"/>
<cage name="B" animal="dog"/>
<cage name="C" animal="cow"/>
<cage name="D" animal="zebra"/>
</animals>
</root>
Saída
<root>
<hungryAnimals>
<cage name="B"/>
<cage name="D"/>
</hungryAnimals>
</root>
ou, alternativamente, se não houver interseções,
<root>
<everythingIsFine/>
</root>
E eu quero obtê-lo usando um predicados aninhados:
<xsl:template match="cage">
<cage>
<xsl:attribute name="name">
<xsl:value-of select="@name"/>
</xsl:attribute>
</cage>
</xsl:template>
<xsl:template match="/root/animalsDictionary">
<xsl:choose>
<!-- in <food> in <cage> -->
<xsl:when test="cage[/root/shortOfSupply/food[ext:isEqualAnimals(./@animal, ?????/@animal)]]">
<hungryAnimals>
<xsl:apply-templates select="cage[/root/shortOfSupply/food[ext:isEqualAnimals(@animal, ?????/@animal)]]"/>
</hungryAnimals>
</xsl:when>
<xsl:otherwise>
<everythingIsFine/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Então, o que devo escrever no lugar disso?????
?
Sei que eu poderia reescrever a folha de estilo inteira usando mais um modelo e uso extensivo de variáveis / parâmetros, mas torna essa folha de estilo significativamente mais complexa, sem falar na folha de estilo real que tenho para um problema rea
Está escrito na referência XPath que o ponto.
sign significa o nó de contexto atual, mas não informa se existe alguma possibilidade de obter o nó de contexto antes disso; e eu simplesmente não acredito que o XPath está faltando esse recurso óbvi