XSLT tiene una función incorporada especial que admite la generación de salida, que es XSLT sí mismo.
Esta es la directiva <xsl:namespace-alias>
XSLT.
Como explaiened porthe XSLT 1.0 Spec:.
"
<!-- Category: top-level-element -->
<xsl:namespace-alias
stylesheet-prefix = prefix | "#default"
result-prefix = prefix | "#default" />
Una hoja de estilo puede utilizar el elemento xsl:namespace-alias
para declarar que un espacio de nombres URI es un alias para otro espacio de nombres URI Cuando un espacio de nombres literal URI. ha sido declarado como un alias para otro URI de espacio de nombres, entonces el URI de espacio de nombres en el árbol de resultados será el URI de espacio de nombres para el que es el alias de espacio de nombres literales, en lugar del URI de espacio de nombres literal. res que el URI del espacio de nombres vinculado al prefijo especificado por el atributo stylesheet-prefix
es un alias para el URI del espacio de nombres vinculado al prefijo especificado por el atributo result-prefix
. Por lo tanto, el atributo stylesheet-prefix
especifica el URI de espacio de nombres que aparecerá en la hoja de estilo, y el atributo result-prefix
especifica el URI de espacio de nombres correspondiente que aparecerá en el árbol de resultados. "
Aquí es un pequeño ejemplo de una transformación que genera una xsl:stylesheet
que contiene un xsl:variable
, que se construye en la forma deseada:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xxx="my:dummyNS" exclude-result-prefixes="xxx"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:namespace-alias result-prefix="xsl" stylesheet-prefix="xxx"/>
<xsl:template match="/*">
<xxx:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xxx:variable name="{@name}">
<xsl:value-of select="."/>
</xxx:variable>
</xxx:stylesheet>
</xsl:template>
</xsl:stylesheet>
Cuando se aplica esta transformación en el siguiente documento XML:
<v name="myVarName">myValue</v>
el resultado deseado se produce:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="myVarName">myValue</xsl:variable>
</xsl:stylesheet>
A continuación, el siguiente paso será lanzar en su "guión" esta generado dinámicamente transformación XSLT.
Simplemente ejecutando su ejemplo produce resultados diferentes a su respuesta. Lo que realmente sale es: ' myValue xxx: variable> xxx: stylesheet> ' –
@blast_hardcheese, no se garantiza que el prefijo del espacio de nombres sea el mismo que el especificado en el atributo' result-prefix' de la declaración 'xsl: namespace-alias' - solo se utiliza para especificar el ** espacio de nombres ** en el que los elementos del resultado literal se deben incluir en el resultado. Por lo tanto, qué prefijo usar en realidad depende del procesador XSLT. Saxon usa el mismo prefijo que el especificado en el atributo 'result-prefix'. Sin embargo, otros procesadores XSLT tienen la libertad de usar lo que sus desarrolladores decidieron que era apropiado. –
@blast_hardcheese, probablemente sepa que si en dos archivos XML solo algunos prefijos (no los URI de espacio de nombres a los que están vinculados) son diferentes, estos dos archivos XML son equivalentes. –