How can I "reuse" code in XSL
xslt
Solution
In your example, "named" templates are you friend here. For example, if you wanted to create the same two elements in different places, create a named template like so
<xsl:template name="exampleTemplate">
<xsl:element name="wsb:codigoOperacion">
<xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_CODOPE" />
</xsl:element>
<xsl:element name="wsb:numeroOperacion">
<xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_NUMOPEBCO" />
</xsl:element>
</xsl:template>
Then, to create these two elements, just call the template like so:
<xsl:call-template name="exampleTemplate" />
And that's it!
Note, just like functions, you can pass parameters to templates too.
<xsl:template name="example">
<xsl:param name="value" />
Value is <xsl:value-of select="$value" />
</xsl:template>
<xsl:call-template name="example">
<xsl:with-param name="value" select="element" />
</xsl:call-template>
As an aside, there is no need to use xsl:element to create an element if you are using a static name, just write out element name directly. So, instead of this
<xsl:element name="wsb:numeroOperacion">
<xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_NUMOPEBCO" />
</xsl:element>
Just do this
<wsb:numeroOperacion>
<xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_NUMOPEBCO" />
</wsb:numeroOperacion>
Problem
I'm using XSLT node. My question is about XSL. I have searched on Internet, but I've only found info about XML processing for show it on a web page. Info I'm searching is how "reuse" some code in this scenario: My XSL is: ``` <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsb="http://tempuri.org/"> <xsl:import href="HubGenerico.xsl" /> <xsl:template match="/RCECSTD2"> <xsl:element name="soap:Envelope"> <xsl:element name="soap:Header" /> <xsl:element name="soap:Body" /> <xsl:choose> <xsl:when test="STDR2_DATOS_CONTROL/STDR2_CODOPE = 1010"> <xsl:element name="wsb:ConsultarSC"> <xsl:element name="wsb:codigoOperacion"> <xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_CODOPE" /> </xsl:element> <xsl:element name="wsb:numeroOperacion"> <xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_NUMOPEBCO" /> </xsl:element> <xsl:element name="wsb:codigoBanco"> <xsl:value-of select="STDR2_DATOS_EMPRESA/STDR2_CODBCO" /> </xsl:element> <xsl:element name="wsb:codigoConvenio"> <xsl:value-of select="STDR2_DATOS_EMPRESA/STDR2_CODCONTR" /> </xsl:element> <xsl:element name="wsb:numeroReferenciaDeuda"> <xsl:value-of select="normalize-space(STDR2_DATOS_TRANSACCION/STDR2_NUMREF_DEUDA)" /> </xsl:element> <xsl:element name="wsb:canalOperacion"> <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_CANAL" /> </xsl:element> <xsl:element name="wsb:codigoOficina"> <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_CODOFI" /> </xsl:element> <xsl:element name="wsb:fechaOperacion"> <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_FECOPE" /> </xsl:element> <xsl:element name="wsb:horaOperacion"> <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_HOROPE" /> </xsl:element> <xsl:element name="wsb:datosEmpresa" /> </xsl:element> </xsl:when> <xsl:when test="STDR2_DATOS_CONTROL/STDR2_CODOPE = 2010"> <xsl:element name="wsb:NotificarPago"> <xsl:element name="wsb:codigoOperacion"> <xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_CODOPE" /> </xsl:element> <xsl:element name="wsb:numeroOperacion"> <xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_NUMOPEBCO" /> </xsl:element> <xsl:element name="wsb:codigoBanco"> <xsl:value-of select="STDR2_DATOS_EMPRESA/STDR2_CODBCO" /> </xsl:element> <xsl:element name="wsb:codigoConvenio"> <xsl:value-of select="STDR2_DATOS_EMPRESA/STDR2_CODCONTR" /> </xsl:element> <xsl:element name="wsb:otrosDatosEmpresa" /> <xsl:element name="wsb:numeroReferenciaDeuda"> <xsl:value-of select="normalize-space(STDR2_DATOS_TRANSACCION/STDR2_NUMREF_DEUDA)" /> </xsl:element> <xsl:element name="wsb:NumDocDeuda"> <xsl:text>1</xsl:text> </xsl:element> <xsl:element name="wsb:formaPago"> <xsl:value-of select="STDR2_DATOS_TRANSACCION/STDR2_FORPAG" /> </xsl:element> <xsl:element name="wsb:codigoMoneda"> <xsl:value-of select="STDR2_DATOS_TRANSACCION/STDR2_CODMON" /> </xsl:element> <xsl:element name="wsb:importeTotalPagado"> <xsl:variable name="importeTotalPagado"> <xsl:call-template name="string-replace"> <xsl:with-param name="text" select="string(STDR2_DATOS_TRANSACCION/STDR2_IMPTOT_PAG)" /> <xsl:with-param name="pattern" select="'.'" /> <xsl:with-param name="replace-with" select="''" /> </xsl:call-template> </xsl:variable> <xsl:value-of select="$importeTotalPagado" /> </xsl:element> <xsl:element name="wsb:detallePagoBBVA" /> <xsl:element name="wsb:canalOperacion"> <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_CANAL" /> </xsl:element> <xsl:element name="wsb:codigoOficina"> <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_CODOFI" /> </xsl:element> <xsl:element name="wsb:fechaOperacion"> <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_FECOPE" /> </xsl:element> <xsl:element name="wsb:horaOperacion"> <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_HOROPE" /> </xsl:element> <xsl:element name="wsb:datosEmpresa" /> </xsl:element> </xsl:when> </xsl:choose> </xsl:element> </xsl:template> </xsl:stylesheet> ``` You see that some created elements are "repeated" (same code) but they have differents parents (`ConsultarSC` and `NotificarPago`). So my question is how can I reuse that "repeated code", I don't if exists some "tag" that can I use how a "reference" (like ESQL).