2011-07-20 10 views
0

XSLTのグリーンはかなり緑色で、私が取り組んでいるシステムの1つはフロントエンドにいくつかのテーブルを生成するために使っています。基本的に私は、各使用するために必要されることなく、ノードを前進させる方法を思ったんだけど、DB2インスタンスに対するクエリ結果セットをXMLに解析されて、出力が同様である...XSLT for-eachを使用しないノードのアドバンス

<ResultSet> 
    <Row> 
     <node1></node1> 
     <node2></node2> 
     <etc> 
    </Row> 
    <Row> 
    </Row> 
</ResultSet> 

を行いますループ。これはXSLTの内部変数(制限されている)を私が理解しているからです。

ページの最後に、上記で作成した変数を使用してテーブルを作成する必要があります。結果セットの前提は、3行を返し、それ以上は返さないということです。私のxsltのコードのいくつかは以下の通りです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html"/> 
    <xsl:template match="/"> 
    ....after some html population... 
    <tbody> 
     <tr> 
      <td>Column</td> 
       <td class="rightAligned"> 
        <xsl:call-template name="formatAsCurrencyNoDecimals"> 
         <xsl:with-param name="numberToFormat" 
          select="summarizedLoads/summary/total" /> 
        </xsl:call-template> 
       </td> 
       .....xsl continues for this row.... 

これが完了したら、次の行に進むために何をする必要がありますか?私は、私は<xsl:template match="/summarizedLoads/">にルートテンプレートの一致を変更し、各行の後にそれを呼び出さなければならないということでした。

各行の中で、最後に使用するためにいくつかの変数を作成する必要があります。

また、すべての行には同じ量のデータが含まれています。うまくいけば、これは私がやろうとしていることについてはっきりしていて、他に何かが必要なら私に知らせてください。

答えて

0

XSLTのスイートスポットは、ネストされたテンプレートを使用する場合です。既に1つのテンプレートがあります。あなたが現在持っているものの下に別のものを作って、match = "Row"としましょう。そのテンプレートでは、すべての行固有の処理を行います。そして、あなたは最終行がそうのようになりたいあなたのメインテンプレート(一致=「/」)の中からそれを呼び出す:あなただけのすべての行の代わりに、最初の3を望んでいた場合

<xsl:apply-templates select = "./Row[0]"/> 
<xsl:apply-templates select = "./Row[1]"/> 
<xsl:apply-templates select = "./Row[2]"/> 

することは、あなたはこれを行うだろう代わりに:

<xsl:apply-templates select = "./Row"/> 

ドットは現在の要素を表します。メインテンプレートに入っているので、それがルート要素のResultSetです。/Rowは、Rowに一致する最初のテンプレートをすべての子孫Row要素に適用することを意味します。

1

あなたはXMLを次のようしていると仮定します。たとえば、//row[position() &lt; 4]

<root> 
    <row>1</row> 
    <row>2</row> 
    <row>3</row> 
    <row>4</row> 
    <row>5</row> 
</root> 

をあなたはXPathを使用することができます唯一の3行を選択するにはXSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
    <xsl:apply-templates select="//row[position() &lt; 4]"/> 
    </xsl:template> 

    <xsl:template match="row"> 
    <xsl:copy-of select="."/> 
    </xsl:template> 

</xsl:stylesheet> 

出力は次のようになります。

<row>1</row> 
<row>2</row> 
<row>3</row> 
+0

良い答え。 +1 – hoodaticus

関連する問題