почему применяемый шаблон повторяется дважды - PullRequest
0 голосов
/ 29 сентября 2011

Привет, я применил шаблон данных, которые должны быть заполнены только один раз, здесь проблема была в том, что это повторялось дважды, может кто-нибудь предложить, чтобы остановить это повторение, найдите ниже мой пример кода xsl

Вот мой XSL:

   <xsl:param name="PackageId"  />
  <xsl:template match="/">      
    <xsl:apply-templates mode="SequenceB"  select="NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId]"/>
    <xsl:apply-templates mode="sequenceC"  select="NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId][position()=1]"/>
</xsl:template>
 <xsl:template mode ="SequenceB" match="NewDataSet/Table">

    <xsl:choose >

          <xsl:when  test ="substring(./MSG_TYPE_CODE,2,3)= '102'"  >

                <xsl:if test ="./CTD_SEQ_NUM"  >
                    <xsl:if test=" position() &gt; 1"></xsl:if>
                    <xsl:value-of select= "concat(':21:',./CTD_SEQ_NUM)" />
                    <xsl:text>&#13;</xsl:text >
                </xsl:if>
              <xsl:if test ="./CURRENCY_CODE" >
                  <xsl:if test=" position() &gt; 1"></xsl:if>
                  <xsl:text/><xsl:value-of select= "concat(':32B:',./CURRENCY_CODE)"/>

              </xsl:if>
              <xsl:if test ="./CTD_SETLD_TRAN_AMT" >
                  <xsl:if test=" position() &gt; 1"></xsl:if>
                  <xsl:text/><xsl:value-of select= "translate(./CTD_SETLD_TRAN_AMT ,'.',',')"/>
                  <xsl:text>&#13;</xsl:text >
              </xsl:if>
        </xsl:when>
    <xsl:when test ="substring(./MSG_TYPE_CODE,2,3)= '103'">
            <xsl:if test ="./TRAN_TYPE_CODE"  >
                <xsl:text/><xsl:value-of select=           "concat(':26T:',./TRAN_TYPE_CODE)" /><xsl:text/>
            </xsl:if>
            <xsl:if test ="./CTD_VALUE_DATE" >
                <xsl:text/><xsl:value-of select= "concat(':32A:',./CTD_VALUE_DATE)"/><xsl:text/>
            </xsl:if>
            <xsl:if test ="./CURRENCY_CODE" >
                <xsl:text/><xsl:value-of select= "./CURRENCY_CODE"/><xsl:text/>
            </xsl:if>
            <xsl:if test ="./CTD_SETLD_TRAN_AMT" >
                <xsl:text/><xsl:value-of select= "translate(./CTD_SETLD_TRAN_AMT,'.',',')"/><xsl:text/>
            </xsl:if>
      </xsl:when>
           </xsl:choose>
</xsl:template> 

     <xsl:template mode="sequenceC" match="NewDataSet/Table">

    <xsl:if test ="substring(./MSG_TYPE_CODE,2,3)= '102'">

    <xsl:if test ="./CTD_VALUE_DATE" >
        <xsl:text/><xsl:value-of select= "concat(':32A:',./CTD_VALUE_DATE)"/><xsl:text/>
    </xsl:if>
    <xsl:if test ="./CURRENCY_CODE" >
        <xsl:text/><xsl:value-of select= "./CURRENCY_CODE"/><xsl:text/>
    </xsl:if>
    <xsl:if test ="./CTD_SETLD_TRAN_AMT" >
        <xsl:text/><xsl:value-of select= "translate(./CTD_SETLD_TRAN_AMT,'.',',')"/>
        <xsl:text>&#13;</xsl:text >
    </xsl:if>
     </xsl:template>

Вот мой XML:

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <Table>
  <RECORD_TYPE_CODE>CTD</RECORD_TYPE_CODE>
  <MSG_TYPE_CODE>O102N</MSG_TYPE_CODE>
  <CTD_SEQ_NUM>000001</CTD_SEQ_NUM>
  <CTD_BEN_INS_ID>ABNAAEAD</CTD_BEN_INS_ID>
  <TRAN_TYPE_CODE>MIS</TRAN_TYPE_CODE>
  <CTD_VALUE_DATE>110911</CTD_VALUE_DATE>
  <CURRENCY_CODE>AED</CURRENCY_CODE>
  <CTD_SETLD_TRAN_AMT>42404.00</CTD_SETLD_TRAN_AMT>
  <CTD_INS_AMT>42404.00</CTD_INS_AMT>
  <CTD_CTD_PKG_ID>2</CTD_CTD_PKG_ID>    
 </Table>
 <Table>
  <RECORD_TYPE_CODE>CTD</RECORD_TYPE_CODE>
  <MSG_TYPE_CODE>O102N</MSG_TYPE_CODE>
  <CTD_SEQ_NUM>000002</CTD_SEQ_NUM>
 <CTD_BEN_INS_ID>ABNAAEAD</CTD_BEN_INS_ID>
 <TRAN_TYPE_CODE>MIS</TRAN_TYPE_CODE>
 <CTD_VALUE_DATE>110911</CTD_VALUE_DATE>
 <CURRENCY_CODE>AED</CURRENCY_CODE>
 <CTD_SETLD_TRAN_AMT>154776.75</CTD_SETLD_TRAN_AMT>
 <CTD_INS_AMT>154776.75</CTD_INS_AMT>
 <CTD_CTD_PKG_ID>2</CTD_CTD_PKG_ID>    
 </Table>
<Table>
<RECORD_TYPE_CODE>CTD</RECORD_TYPE_CODE>
<MSG_TYPE_CODE>O102N</MSG_TYPE_CODE>
<CTD_SEQ_NUM>000003</CTD_SEQ_NUM>
<CTD_BEN_INS_ID>ABNAAEAD</CTD_BEN_INS_ID>
<TRAN_TYPE_CODE>MIS</TRAN_TYPE_CODE>
<CTD_VALUE_DATE>110911</CTD_VALUE_DATE>
<CURRENCY_CODE>AED</CURRENCY_CODE>
<CTD_SETLD_TRAN_AMT>1800.00</CTD_SETLD_TRAN_AMT>
   <CTD_INS_AMT>1800.00</CTD_INS_AMT>
<CTD_CTD_PKG_ID>2</CTD_CTD_PKG_ID>    
      </Table>
      </NewDataSet>

выход:

: 21: 000001 : 32B: AED42404,00 : 21: 000001 : 32B: AED42404,00 : 21: 000002 : 32B: AED154776,75 : 21: 000002 : 32B: AED154776,75 : 21: 000003 : 32B: AED1800,00 : 21: 000003 : 32B: AED1800,00 : 32A: 110911AED42404,00

требуемый вывод как:

: 21: 000001 : 32B: AED42404,00 : 21: 000002 : 32B: AED154776,75 : 21: 000003 : 32B: AED1800,00 : 32A: 110911AED42404,00

1 Ответ

0 голосов
/ 29 сентября 2011

В вашем первом шаблоне у вас есть несколько раз следующая строка:

<xsl:if test=" position() &gt; 1"></xsl:if>

Эта строка ничего не делает, код, который должен выполняться только при выполнении условия, должен проходить между тегами (как вы это делали в других местах).

Аналогично, у вас есть такие вещи в нескольких местах:

<xsl:text/><xsl:value-of select= "./CURRENCY_CODE"/><xsl:text/>

Теги text не имеют смысла, так как они автоматически закрываются.

Вы должны провести очистку при открытии / закрытии всех тегов.Даже если проблема не исчезнет, ​​ее будет намного легче проанализировать.

...