おおよそ次の構造を持つ XML があります。ここで関連する特性は、要素ペア "F" と "Child_Fs" の再帰的な関係です。「Child_Fs」には任意の数の「F」を含めることができ、「F」には「Child_Fs」を 1 つだけ含めることができます。
<A>
<B>
<F id="1">
<J/>
<K/>
<Child_Fs>
<F id="1.1">
<J/>
<K/>
<Child_Fs>
<F id="1.1.1">
<J/>
<K/>
<Child_Fs>
...
</Child_Fs>
</F>
<F id="1.1.2">
...
</F>
<F id="1.1.3">
...
</F>
<F id="1.1.4">
...
</F>
.
.
.
</Child_Fs>
</F>
<F id="1.2">
...
</F>
<F id="1.3">
...
</F>
<F id="1.4">
...
</F>
.
.
.
</Child_Fs>
</F>
<F id="2">
...
</F>
<F id="3">
...
</F>
<F id="4">
...
</F>
.
.
.
<G/>
<H/>
<I/>
</B>
<C/>
<D/>
<E/>
</A>
私の実際の XML には ID が含まれていません。説明のためにこの例に ID を書き込んだだけです。
したがって、変換後に取得したいのは次の XML です。ここで、すべての「F」要素は、対応する最上位の「F/Child_Fs」祖先の子です。F 要素の最大の深さは 2 つのオカレンス (F/Child_Fs/F/Childfs) のみにする必要があることを意味します。ここでのもう 1 つの重要な要件は、すべてのデータ (属性とテキストを含む) をそのまま維持することです。これは単なる再配置操作です。
<A>
<B>
<F id="1">
<J/>
<K/>
<Child_Fs>
<F id="1.1">
<J/>
<K/>
<Child_Fs>
</Child_Fs>
</F>
<F id="1.1.1">
<J/>
<K/>
<Child_Fs>
</Child_Fs>
</F>
...
<F id="1.1.2">
...
</F>
<F id="1.1.3">
...
</F>
<F id="1.1.4">
...
</F>
.
.
.
<F id="1.2">
...
</F>
<F id="1.3">
...
</F>
<F id="1.4">
...
</F>
.
.
.
</Child_Fs>
</F>
<F id="2">
...
</F>
<F id="3">
...
</F>
<F id="4">
...
</F>
.
.
.
<G/>
<H/>
<I/>
</B>
<C/>
<D/>
<E/>
</A>
誰かが私にこれについてのヒントを与えることができれば、とても感謝しています。今まで、正しい XSL スタイルシートを思いつくことができませんでした。
よろしくお願いします。