シーケンシャルな XML ノード リストを階層構造に変換する必要がありますが、XSLT 固有の知識のギャップに遭遇しました。入力 XML には、記事、色、およびサイズが含まれています。以下のサンプルでは、「Record1」は記事、「Record2」は色、「Record3」はサイズを表しています。色とサイズ (record2 と record3) の要素の数はさまざまです。
<root>
<Record1>...</Record1>
<Record2>...</Record2>
<Record3>...</Record3>
<Record3>...</Record3>
<Record2>...</Record2>
<Record3>...</Record3>
<Record3>...</Record3>
<Record3>...</Record3>
<Record3>...</Record3>
<Record1>...</Record1>
<Record2>...</Record2>
<Record3>...</Record3>
<Record3>...</Record3>
<Record2>...</Record2>
<Record3>...</Record3>
<Record3>...</Record3>
<Record3>...</Record3>
<Record3>...</Record3>
</root>
すべてのフィールドは同じ階層レベルにありますが、出力としてこの構造を作成する必要があります。
<root>
<article> -> Record1
<color> -> Record2
<size>...</size> -> Record3
<size>...</size> -> Record3
</color>
<color> -> Record2
<size>...</size> -> Record3
<size>...</size> -> Record3
<size>...</size> -> Record3
<size>...</size> -> Record3
</color>
</article>
<article> -> Record1
<color> -> Record2
<size>...</size> -> Record3
<size>...</size> -> Record3
</color>
<color> -> Record2
<size>...</size> -> Record3
<size>...</size> -> Record3
<size>...</size> -> Record3
<size>...</size> -> Record3
</color>
</article>
</root>
ノードを順番に反復しようとしましたが、たとえば、'color' (=record2) ノードが処理されている間、'article' (=record1) ノード タグを閉じないままにする必要があります。'color' が閉じられていない 'size' (=record3) の処理についても同じことが言えますが、それは XSLT では許可されていません。私の次のアイデアは、すべての記事、色、およびサイズ レベルのテンプレートを呼び出すことでしたが、たとえば、現在の「record2」と「record1」で表される次の記事の間のすべての「record3」ノードを選択する方法がわかりません。
XSLT 1.0 のみをサポートする BizTalk Server でこの変換が必要なため、XSLT バージョンにも制限があります。
誰かが私を正しい方向に押し進めることができますか?