modificar un solo atributo con XSLT
¿Cuál es la XSLT simple que se pueda imaginar para transformar el valor de la primera, en este caso solamente, /configuration/system.web/compilation/@debug
atributo de true
a false
?
modificar un solo atributo con XSLT
¿Cuál es la XSLT simple que se pueda imaginar para transformar el valor de la primera, en este caso solamente, /configuration/system.web/compilation/@debug
atributo de true
a false
?
Esta transformación:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="system.web/compilation[1]/@debug">
<xsl:attribute name="debug">false</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
cuando se aplica en este documento XML:
<configuration>
<system.web>
<compilation debug="true" defaultLanguage="C#">
<!-- this is a comment -->
</compilation>
<compilation debug="true" defaultLanguage="C#">
<!-- this is another comment -->
</compilation>
</system.web>
</configuration>
produce el, resultado correcto deseada: modifica el atributo debug
de la primera compilation
niño de cualquier elemento system.web
(pero sabemos que hay ly un elemento system.web
en un archivo de configuración.
<configuration>
<system.web>
<compilation debug="false" defaultLanguage="C#">
<!-- this is a comment -->
</compilation>
<compilation debug="true" defaultLanguage="C#">
<!-- this is another comment -->
</compilation>
</system.web>
</configuration>
Como vemos, sólo el primer atributo se debug
modifird a false
, según sea necesario.
Esto se llama transformación de patrón de identidad para XSLT, y como señaló @Dimitre Novatchev, es extremadamente poderoso. – lavinio
Es una pena que el elemento 'xsl: attribute' tenga que mencionar el nombre del atributo que se va a cambiar, cuando eso ya se ha dado en el XPath que coincide con el' xsl: template' que lo acompaña. ¿Hay alguna manera de decir "establecer este atributo, como se llame"? –
@TomAnderson: Se puede usar la notación AVT: '
<xsl:attribute name="debug">false</xsl:attribute>
dentro del <compilation>
? ¿O estoy malentendiendo la pregunta?
Buena pregunta (+1). Vea mi respuesta para una solución corta, simple y correcta. La respuesta de Lucero en este momento es bastante incorrecta --ver mi comentario a su respuesta. –