XSLT 2.0
mediante XSLT 2.0, la siguiente solución funciona:
<xsl:variable name="map">
<entry key="key-1">value1</entry>
<entry key="key-2">value2</entry>
<entry key="key-3">value3</entry>
</xsl:variable>
<xsl:template match="/">
<output>
<xsl:value-of select="$map/entry[@key='key-1']"/>
</output>
</xsl:template>
XSLT 1.0
No puede utilizar un fragmento de árbol de resultados en una expresión XPath en XSLT 1.0, pero fn:document()
puede recuperar valores del mapa. Una respuesta a similar question funcionará aquí:
<xsl:value-of select="document('')//xsl:variable[@name='map']/map/entry[@key='key-1']"/>
Como se describe en la XSLT 1.0 specification:
document('')
se refiere al nodo raíz de la hoja de estilo; el árbol representación de la hoja de estilo es exactamente igual que si el documento XML que contiene la hoja de estilo fuera el documento fuente inicial.
Sin embargo, no necesita utilizar xsl:variable
para esto. Se podría especificar su nodo del mapa directamente bajo xsl:stylesheet
, pero hay que recordar que una serie de elementos de nivel superior deben tener un espacio de nombres no nula URI:
<xsl:stylesheet
version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="some.uri" exclude-result-prefixes="my">
<my:map>
<entry key="key-1">value1</entry>
<entry key="key-2">value2</entry>
<entry key="key-3">value3</entry>
</my:map>
<xsl:template match="/">
<output>
<xsl:value-of select="document('')/*/my:map/entry[@key='key-1']"/>
</output>
</xsl:template>
</xsl:stylesheet>
Hay un poco de un error tipográfico pasando allí, es que también en su documento? Es que debería leer . –
Rob