問題

私はXSLTノードを使用しています。私の質問はXSLです。私はインターネット上で検索しましたが、Webページに表示するためのXML処理に関する情報しか見つかりませんでした。私が検索している情報は、このシナリオでいくつかのコードを「再利用」する方法です。

私のXSLは:

 <?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>
 

いくつかの作成された要素は「繰り返される」(同じコード)が、異なる親(ConsultarSCNotificarPago)があることがわかります。だから私の質問は、どのように私はその "繰り返しコード"を再利用することができます、私は "参照"(ESQLのような)を使用することができますいくつかの "タグ"が存在するかどうかではありません。

  ベストアンサー

あなたの例では、 "named"テンプレートはあなたの友人です。たとえば、別の場所に同じ2つの要素を作成したい場合は、そのような名前付きテンプレートを作成します

  <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>
 

次に、これらの2つの要素を作成するには、次のようにテンプレートを呼び出すだけです。

 <xsl:call-template name="exampleTemplate" />
 

それだけだ!

関数と同様に、パラメータをテンプレートに渡すこともできます。

 <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>
 

さて、静的な名前を使用している場合は、要素を作成するためにxsl:elementを使用する必要はありません。したがって、これの代わりに

     <xsl:element name="wsb:numeroOperacion">
        <xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_NUMOPEBCO" />
    </xsl:element>
 

ちょうどこれを行う

     <wsb:numeroOperacion>
        <xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_NUMOPEBCO" />
    </wsb:numeroOperacion>
 

  同じタグがついた質問を見る

xslt