2011-08-01 9 views
0

お尋ねします。ルックアップテーブルでxmlデータをチェックする条件を追加する可能性があります。ルックアップテーブルに値がなければ、出力にconst 8を追加しますか? XSLTコード:ルックアップテーブルでxmlデータをチェックする条件を追加する方法

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:key name="Department" match="Department" use="../Collection"/> 
    <xsl:template match="/"> 
    <document> 
     <xsl:apply-templates/> 
    </document> 
</xsl:template> 
<xsl:template match="line"> 
    <xsl:variable name="inputDep" select="field[@id='3']"/> 
<Department> 
    <xsl:for-each select="document('lookup.xml')"> 
     <xsl:for-each select="key('Deparment',$inputDep)"> 
      <xsl:value-of select="."/> 
     </xsl:for-each> 
    </xsl:for-each> 
</Department> 

</xsl:template> 

</xsl:stylesheet> 

ルックアップテーブル:

<document> 
    <line-item> 
     <Collection>1</Collection> 
     <Department>3</Department> 
    </line-item> 
    <line-item> 
     <Collection>2</Collection> 
     <Department>1</Department> 
    </line-item> 
    <line-item> 
     <Collection>3</Collection> 
     <Department>2</Department> 
    </line-item> 
</document> 

xmlファイル:

<document> 
    <line id="0"> 
     <field id="3"><![CDATA[1]]></field> 
    </line> 
    <line id="1"> 
     <field id="3"/> 
    </line> 
    <line id="2"> 
     <field id="3"/><![CDATA[4]]></field> 
    </line> 
</document> 

結果:

<Department>3<Department> 
<Department>8<Department> 
<Department>8<Department> 
+0

なぜ内側のfor-eachループですか? Deparment(sic)キーを使用したルックアップが複数のノードを返すことを期待していますか?そうであれば出力は正しいでしょうか? xmlファイル用ではないルックアップテーブル用にそれぞれ –

答えて

1

はあなたにルックアップ値を割り当てることができます変数を選択し、何を選択するか何かが見つかったかどうかに基づいて出力します。

編集2:フルデモンストレーションスタイルシート:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:key name="Department" match="Department" use="../Collection"/> 

    <xsl:template match="/"> 
    <document> 
     <xsl:apply-templates/> 
    </document> 
    </xsl:template> 

    <xsl:template match="line"> 
    <xsl:variable name="inputDep" select="field[@id='3']"/> 
    <Department> 
     <xsl:for-each select="document('lookup.xml')"> 
     <xsl:variable name="value" select="key('Department',$inputDep)"/> 
     <xsl:choose> 
      <xsl:when test="$value"> 
      <xsl:value-of select="$value"/> <!-- see note --> 
      </xsl:when> 
      <xsl:otherwise>8</xsl:otherwise> 
     </xsl:choose> 
     </xsl:for-each> 
    </Department> 
    </xsl:template> 

</xsl:stylesheet> 

注:ループの値が意図的ではなかったと仮定し、単純なxsl:value-ofと元のスタイルシートでxsl:for-eachループを取り替えました。実際には、これをfor-eachループに置き換えることができます。

+0

inner。私はあなたの答えを使用しようとするが、それは動作しません..私は各ループの代わりにあなたのコードを追加しようとします。 – Petras

+0

@ペトラは、私が念頭に置いていたことを示すより完全なサンプルコードを提供することで、私の答えを明確にしようとしました。 –

+0

あなたのソリューションを試してみてください。まず、行にエラーが表示されます。/field [@ id = 3]に選択値を変更しようとすると、すべての部門= 8 – Petras

関連する問題