2011-09-29 73 views
0

您好,我已經應用模板的數據應該是填充只有一次,這裏的問題是它是在重複兩次任何一個可以建議停止repeatation找到下面的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

+3

XSLT示例目前不是格式良好的。它看起來像在最終模板中缺少** xsl:if ** end-tag。你能否糾正這一點,所以沒有混淆。此外,XSLT在應用模板時引用** CTD_CTD_PKG_ID **元素,但實際上並不存在於示例XML中。你能糾正這個嗎?謝謝! –

+0

任何一個請給出一些建議,以避免重複 – pravz

+0

爲什麼標籤重複,請給我一些建議,以阻止它 – pravz

回答

0

在你的第一個模板,你有幾個倍以下行:

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

此行不會做任何事情,代碼,只有當條件爲真標籤之間應該去執行(你在其他地方做了)。

同樣,你有這種東西在幾個地方:

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

text標籤沒有任何意義,因爲它們是自動關閉。

您應該對所有標籤的打開/關閉進行一輪清理。即使問題沒有消失,分析起來也會容易得多。

+0

你能否請清楚老闆...我已經刪除了第一個模板中的所有位置線,即使是數據重複生成 – pravz

+0

您需要幫助我們來幫助您。提供經過清理的XSLT,這個XSLT實際上可以與您提供的數據相匹配(數據中沒有CTD_CTD_PKG_ID,這是正確的XSLT?正確的源XML?)。讓它可以讓我們自己測試一下,看看問題出在哪裏。另外,不要把它當作魔法,如果「if」測試設置在第一位,那麼可能有一個原因...... –

+0

是啊!我已經在xml boss中提供了軟件包ID – pravz