2016-05-24 13 views
1
にコピーする

ノードのセットを含む別の変数のコピーをどのように変数に割り当てることができますか?後でそれがために、各ループカウンタとして使用していますので、私は別の変数を定義xsltすべてのノードを変数

<xsl:variable name="btchs" select="$idoc/E1EDL20/E1EDL24[./HIPOS != 0]"></xsl:variable> 
    <xsl:variable name="lines" select="$idoc/E1EDL20/E1EDL24[./HIPOS = 0]"></xsl:variable> 
    <xsl:variable name="cnt" select="count($btchs)"></xsl:variable> 
    <xsl:variable name="blines"> 
     <xsl:choose> 
      <xsl:when test="$cnt=0"> 
       Here I want to make a copy all nodes of $lines variable 
      </xsl:when> 
      <xsl:otherwise> 
       Here I want to make a copy all nodes of $btchs variable    
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:variable> 

: はここに私のコードです。あなたはXSLT-1.0またはXSLT-2.0を使用している場合に依存

<xsl:for-each select="$blines"> 
    ... 
    </xsl:for-each> 
+2

''テスト条件によって 'call-template'を使うべきです。なぜあなたはもう一つの変数を定義し、 'btchs'または' lines'のうちの1つを割り当てたいのでしょうか? – SomeDude

答えて

2

quote is determinative以下XSLT-1.0で

XSLT 1.0で結果ツリーフラグメント(RTF)タイプがノードセットに似ているが、それは実際には第二級市民です。 RTFは、xsl:variableを使用して一時的なツリーを構築するたびに得られるものです。問題は、通常、node-set()のようなベンダー固有の拡張関数を使用してRTFをファーストクラスに変換しない限り、このツリーの内部にアクセスするためにXPath式を使用できないことですノード集合(1つのルートノードからなる)。

XSLT-1.0では、それ以降のXPathクエリでは照会できないRTFしか得られないため、あなたの望みを満たすことができません。あなたの質問のコアに戻って

、以下のルールは、あなたのXSLのバージョンに応じて適用されます:

  • 1.0:<xsl:variable name="abc" select="..." />- >照会可能
  • 1.0:<xsl:variable name="bcd"><xsl:whatever-function>...</xsl:whatever-function> - >を照会不可能
  • 2.0:<xsl:variable name="abc" select="..." />- >照会
  • 2.0: <xsl:variable name="bcd"><xsl:whatever-function>...</xsl:whatever-function> - >クエリ可能 - その変数のすべてのノードをツリーとして返します。

あらすじ:あなたが複雑に構築さXSLT-1.0変数は、あなたのツリーの完全照会可能サブセットを含めることはできません!

2

は、あなたのXSLTフラグメントを見ると、それはあなたがHIPOSがゼロでない場合blines変数はすべてE1EDL24の要素を含むようにしたいように見える、と無ような要素が存在しない場合HIPOSがゼロである場合、それはすべてのE1EDL24が含まれている必要があります。

<xsl:variable name="blines" select="$btchs|$lines[not($btchs)]" /> 

これは、ソースXMLでオリジナルの要素を参照しますのではなく、このような場合は、次のように

は、代わりに変数の要素をコピーしようとしているのは、blines変数を定義することができますResult Tree Fragmentを作成すると、それでもクエリ可能になります。

関連する問題