Datovariabile in xsl: template pattern matching
Un foglio di stile XSLT con una variabile globale:
<xsl:variable name="lang" select="/response/str[@name='lang']"/>
Domanda
Da dove viene la limitazione che utilizza variabili in predicati è errato nel modello di corrispondenza xsl:template
, ma è accettabile in xsl:apply-templates
selezionando il motivo?
<!-- throws compilation error, at least in libxslt -->
<xsl:template match="list[@name='item_list'][$lang]"/>
<!-- works as expected -->
<xsl:template match="list[@name='item_list'][/response/str[@name='lang']]"/>
<!-- works as expected -->
<xsl:template match="response">
<xsl:apply-templates select="list[@name='item_list'][$lang]">
</xsl:template>
Non sono sicuro che sia la limitazione, ma sei sicuro che il tuo '$ lang' contiene un valore stringa (o numerico) ma non un qualche set di nodi? – YuS
@yuri, contiene un set di nodi, ma non vedo un motivo per cui un set di nodi non è consentito nel contesto. – newtover
Non posso dire dettagli sul motivo per cui la restrizione è stata specificata in XSLT 1.0, ma posso dirti che è andata in XSLT 2.0, quindi potresti prendere in considerazione di passare a quella versione della lingua e una delle sue implementazioni come Saxon 9 o AltovaXML. –