2011-03-07 6 views
2

I folllowing xmlファイルがあります。XSLTソートまたはグループバイ

<DATABLOCK> 
    <LINE> 
     <DATA>010000</DATA> 
     <DATA>[email protected]</DATA> 
     <DATA>[email protected]</DATA> 
     <DEBIT></DEBIT> 
     <CREDIT>-0</CREDIT> 
    </LINE> 
    <LINE> 
     <DATA></DATA> 
     <DATA>[email protected]</DATA> 
     <DATA>[email protected]</DATA> 
     <DEBIT></DEBIT> 
     <CREDIT>-0</CREDIT> 
    </LINE> 
    <LINE> 
     <DATA>010002</DATA> 
     <DATA>[email protected]</DATA> 
     <DATA>[email protected]</DATA> 
     <DEBIT></DEBIT> 
     <CREDIT>0</CREDIT> 
    </LINE> 
    <LINE> 
     <DATA></DATA> 
     <DATA>[email protected]</DATA> 
     <DATA>[email protected]</DATA> 
     <DEBIT></DEBIT> 
     <CREDIT>-0</CREDIT> 
    </LINE> 
    <LINE> 
     <DATA></DATA> 
     <DATA>[email protected]</DATA> 
     <DATA>[email protected]</DATA> 
     <DEBIT></DEBIT> 
     <CREDIT>0</CREDIT> 
    </LINE> 
    <LINE> 
     <DATA>010003</DATA> 
     <DATA>[email protected]</DATA> 
     <DATA>[email protected]</DATA> 
     <DEBIT></DEBIT> 
     <CREDIT>640,650</CREDIT> 
    </LINE> 
    <LINE> 
     <DATA></DATA> 
     <DATA>[email protected]</DATA> 
     <DATA>[email protected]</DATA> 
     <DEBIT>567,103</DEBIT> 
     <CREDIT></CREDIT> 
    </LINE> 
    <LINE> 
     <DATA></DATA> 
     <DATA>[email protected]</DATA> 
     <DATA>[email protected]</DATA> 
     <DEBIT>73,547</DEBIT> 
     <CREDIT></CREDIT> 
    </LINE> 
</DATABLOCK> 

このファイルには、私は容易に変更できないため、出力はそれが変更され、表示形式を作成するよりも、XMLデータを生成し、コーディングを把握するのに時間がかかるだろう、です。データは、DATAノードの値がジャーナル番号、承認者、転記先、借方額、与信額に等しいジャーナルレポートを表します。私はこれまで標準レポートXSLファイルを編集した:最初のデータ要素が空である場合

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <html> 
    <body> 
    <h1>Posted Journals:</h1> 
    <table border="1"> 
     <tr bgcolor="#9acd32"> 
     <th>Journal</th> 
     <th>Approved By</th> 
     <th>Posted By</th> 
     </tr> 
     <xsl:for-each select="DATABLOCK/LINE"> 
     <tr> 
       <xsl:for-each select="DATA"> 
         <TD><xsl:value-of select="."/></TD> 
       </xsl:for-each> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 

私の問題は、その後のLINEを無視しています。

Journal Approved By Posted By 
010000  [email protected] [email protected] 
010002  [email protected] [email protected] 
010003  [email protected] [email protected] 

私はXSLTで完全に新たなんだと、彼らが適用される場合がありますが、完全に構文を理解していないとのように見えるそのオンラインこまごまとを見つける:私の所望の出力は、これがあるので、私はデビットカードまたはクレジットを必要としません私のシナリオのためにそれを修正する方法。

+0

+1まあ書か質問 –

答えて

1

だけこれがため、各第1のデータ要素に、非空のテキストノードを持つ行のみを処理するように制限

<xsl:for-each select="DATABLOCK/LINE[not(DATA[1]/text()='')]"> 

するために、各条件を変更します。彼らはすでにグループ化し、ソートされている場合は、単に最初のDATA要素の値を持つ行をレンダリングし、残りの部分をスキップすることができますように、それが見えます

2

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" /> 

<xsl:template match="DATABLOCK"> 
    <html> 
    <body> 
    <h1>Posted Journals:</h1> 
    <table border="1"> 
     <tr bgcolor="#9acd32"> 
     <th>Journal</th> 
     <th>Approved By</th> 
     <th>Posted By</th> 
     </tr> 
     <xsl:apply-templates /> 
    </table> 
    </body> 
    </html> 
    </xsl:template> 

    <!--Do not render LINEs that do not have a value for the first DATA element--> 
    <xsl:template match="LINE[not(normalize-space(DATA[1]))]"/> 

    <!--Each LINE element will be renderd as a Row--> 
    <xsl:template match="LINE"> 
    <tr><xsl:apply-templates select="DATA"/></tr> 
    </xsl:template> 

    <!--Each DATA element will be a column --> 
    <xsl:template match="DATA"> 
    <td><xsl:value-of select="."/></td> 
    </xsl:template> 
</xsl:stylesheet> 
+0

+1良い答えのために。 –

+0

+1(XSLTスタイル用) – Flack

+0

+1正解とパターンマッチング。 –

関連する問題