2016-04-07 10 views
0

xml giriş verilerini html biçimine biçimlendirmek için xslt kullanıyorum. Durum: TRANSACTIONS düğümünde ve işlem listesinde bir özellik olarak açılış denge değerine sahip olduğumdur. Aşağıdaki gibi html tablosunu yazdıracağım.
ilk satır,
açılış sırasının değeri, ikinci satır, TRANSACTIONS içindeki + AMOUNT @ ilk düğümünün açılış değeridir.
üçüncü satır, TRANSACTIONS içinde @ ikinci satır + AMOUNT @ ikinci düğümüdür. dinlenme sıralar Banka hesap işlemini işlemek için Xslt

<results> 
<TRANSACTIONS opening-balance="100"> 
    <TRANSACTION> 
     <TYPE>DEBIT</TYPE> 
     <AMOUNT>10</DR_CR_MARKER> 
     <VALUE_DATE_1>20150726</VALUE_DATE_1> 
    </TRANSACTION> 
    <TRANSACTION> 
     <TYPE>DEBIT</TYPE> 
     <AMOUNT>20</DR_CR_MARKER> 
     <VALUE_DATE_1>20150626</VALUE_DATE_1> 
    </TRANSACTION> 
    <TRANSACTION> 
     <TYPE>DEBIT</TYPE> 
     <AMOUNT>30</DR_CR_MARKER> 
     <VALUE_DATE_1>20150826</VALUE_DATE_1> 
    </TRANSACTION> 
</TRANSACTIONS> 
</results> 

ve bu süreç benim XSLT için Ve vb

<xsl:template match="results"> 
<xsl:param name="opening-balance"> 
    <xsl:value-of select="TRANSACTIONS/@opening-balance"/> 
</xsl:param> 
    <xsl:for-each select="TRANSACTIONS/TRANSACTION"> 
     <xsl:sort select="VALUE_DATE_1"/> 
     <tr style="background-color: yellow"> 
      <td> 
       <!-- i want to print total amount value here --> 
       <xsl:variable name="opening-balance" select="$opening-balance+amount" /> 
       <xsl:value-of select="$opening-balance"/> 
      </td> 
     </tr> 
    </xsl:for-each> 

ben bu kodla bunu cannt olduğunu. , bunu yapmama yardım eder misin?

cevap

1

Size çıktısını sıralamak eğer, bunun yerine bu ifade kullanabilirsiniz Eğer Ancak

<xsl:value-of select="$opening-balance + AMOUNT + sum(preceding-sibling::TRANSACTION/AMOUNT)"/> 

özetlemek isteyen tüm önceki işlemleri seçmek için preceding-sibling ekseni ile birlikte, burada sum işlevini kullanabilirsiniz düşük değerlere

<xsl:value-of select="$opening-balance + sum(../TRANSACTION[VALUE_DATE_1 &lt;= current()/VALUE_DATE_1]/AMOUNT)"/> 

Yani bu açılış dengesini, cari işlem için miktar ve tüm önceki işlemlerden toplamı ekler

tüm düğümleri seçin.

bu XSLT deneyin:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /> 

<xsl:template match="results"> 
    <xsl:param name="opening-balance" select="TRANSACTIONS/@opening-balance"/> 
    <table> 
     <tr> 
      <td> 
       <xsl:value-of select="$opening-balance"/> 
      </td> 
     </tr> 
     <xsl:for-each select="TRANSACTIONS/TRANSACTION"> 
      <xsl:sort select="VALUE_DATE_1"/> 
      <tr style="background-color: yellow"> 
       <td> 
        <xsl:value-of select="$opening-balance + sum(../TRANSACTION[VALUE_DATE_1 &lt;= current()/VALUE_DATE_1]/AMOUNT)"/> 
       </td> 
      </tr> 
     </xsl:for-each> 
    </table> 
    </xsl:template> 
</xsl:stylesheet> 

bu yalnızca tüm VALUE_DATE_1 miktarları farklıdır çalışacaktır dikkat etmeyin. Aynı değere sahip iki VALUE_DATE_1 varsa, sıralamak için ek bir ölçüt belirtmeniz gerekir.

+0

Teşekkürler, bu works.but maalesef için sıralama kullanıyorum ve bu hesaplama doğru değil –

+0

Sorunuzu 'xsl: sort' kullanarak gösterebilir misiniz? hiç Teşekkür ederim! –

+0

tamamlandı, şimdiden teşekkürler –