変換に使用するXSLTマップがあります。私の問題は、カウント1.eをどのように思い出すことができるかです。ループが実行された回数。例えば
<xsl: for each> // This runs some 3 times
<xsl: call-template > // This call template recursively runs 10 times
<xsl: with- param >
</xsl: call-template >
<xsl: for each>
上記の例では、外側のforループが3回実行され、内側のcall-templateが再帰的に自分自身を呼び出して、10回と思われるものを出力します。したがって、全部で3 * 10=30サイクルです。
ここで必要なのは、最初の番号001があるとします。forループが最初に実行されると、テンプレートが呼び出され、10回再帰的に呼び出されます。だから私は001から010までの数字を印刷しました
次にループを実行するときに、3回目に001から010までの数値を再度出力しました。しかし、私が欲しいのは最後のカウントを覚えておくことです。最初の反復で010に達したとします。したがって、2回目の反復では、カウントを011から開始し、021まで印刷します。3回目は、022-032から印刷します。
しかし、誰かが私にそれをどのように行うことができるかを提案できますか?印刷がすでに行われた最後の値をどのように思い出すことができますか?
そしてもう1つ、実際にはXSLT1.0に制限されています。それが、上記の例のようにループしなければならない理由です。
これは大きな助けになるでしょう
私がやりたいのは次のようなものです。入力xmlが次のようになっているとします。
<A>
<B from="123456781" to="123456782">
........
</B>
<B from="123456781" to="123456785">
........
</B>
<B from="123456788" to="123456788">
........
</B>
</A>
上記のxmlでは、各ノードBは「from-to」の範囲に関連付けられています。指定された範囲内の数と同じ数のouputBノードを作成する必要があります。また、作成された各outputBノードの一意のカウントを取得する必要があります。たとえば、出力xmlは次のようになります。
<root>
<outputB value="123456781" id="001"> // from first B node from="123456781" to="123456782"
<outputB value="123456782" id="002">
<outputB value="123456781" id="003">
<outputB value="123456782" id="004">// from second B node from="123456781" to="123456785"
<outputB value="123456783" id="005">
<outputB value="123456784" id="006">
<outputB value="123456785" id="007">
<outputB value="123456788" id="008">// from third B node from="123456788" to="123456788"
</root>
したがって、上記のxslでは、各入力Bノードでbu for-eachをロッピングしている間、fromおよびtoパラメーターの範囲値に基づいて再帰的にデータを入力しました。したがって、正確な数のoutputBノードを作成します。ただし、ここでの問題は、生成されたxmlで一意のカウントまたはIDを維持することです。
ありがとう :)