online - xml a xsl
XSL que devuelve el XML sin cambios (3)
Estoy buscando un fragmento de XSL que simplemente devuelva el XML inalterado. Parece trivial, pero parece que no puedo encontrar un ejemplo en ninguna parte de la web. ¿Alguna ayuda por ahí?
Este es un problema común y la respuesta se llama transformación de identidad . La siguiente plantilla copiará el XML existente correctamente. A continuación, agrega plantillas adicionales para modificar el comportamiento (por ejemplo, eliminar ciertos elementos, renombrar elementos o atributos, etc.).
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
Para copiar el documento XML completo, es necesario tener una plantilla que coincida con la raíz. Esto podría ser:
<xsl:template match="/">
o
<xsl:template match="node()">
Entonces una sola copia del nodo actual (el nodo raíz) es suficiente:
<xsl:copy-of
select = "." />
Entonces, una de esas transformaciones completas es:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
Aunque esta es probablemente la transformación más simple, los programadores XSLT usan otra, conocida como la identity transformation
o la identity rule
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
La transformación de la identidad de resonancia se considera uno de los patrones de diseño XSLT más fundamentales y para ser tan masivamente utilizado, es que al anular esta regla de plantilla con otras plantillas más específicas, uno puede realizar muy fácilmente una variedad de operaciones que de lo contrario se difícil. Los ejemplos son eliminar un (a) elemento (s) particular (es) que tienen un nombre específico o satisfacer alguna otra condición, renombrar elementos particulares, cambiar el espacio de nombres de elementos particulares, crear nuevos hijos o hermanos de elementos particulares, ..., etc.
Para obtener más información y fragmentos de código usando la transformación de identidad, mira here .
Qué tal si:
<xsl:template match ="/">
<xsl:copy-of select="."/>
</xsl:template>
Tal vez hay una manera aún más simple?