XSLT に比較的慣れていないので、単純な質問であることを願っています。私はいくつかのフラットな XML ファイルを持っていますが、これはかなり大きくなる可能性があり (例: 7MB)、「より階層化」する必要があります。たとえば、フラット XML は次のようになります。
<D0011>
<b/>
<c/>
<d/>
<e/>
<b/>
....
....
</D0011>
最終的には次のようになります。
<D0011>
<b>
<c/>
<d/>
<e/>
</b>
<b>
....
....
</D0011>
私はこれのために動作する XSLT を持っており、基本的にすべての b 要素のノードセットを取得し、「following-sibling」軸を使用して、現在の b ノードに続くノードのノードセットを取得します (つまり、following-sibling::* [position()=$nodePos])。次に、再帰を使用して、別の b 要素が見つかるまで兄弟を結果ツリーに追加します (もちろん、より汎用的にするためにパラメーター化しました)。
また、次の b ノードの XML 内の位置を送信し、*[position() = $nodePos] 選択を介して (再帰を使用して) 次々にノードを選択するソリューションもあります。
問題は、XML ファイルのサイズが大きくなると、変換の実行時間が許容できないほど長くなることです。XML Spy で調べてみると、それぞれのメソッドで時間がかかるのは「following-sibling」と「position()=」のようです。
私が本当に必要としているのは、上記の選択でノードの数を制限する方法です。そのため、実行される比較が少なくなります。位置がテストされるたびに、ノードセット内のすべてのノードがテストされ、その位置が正しいかどうかが確認されます。それを行う方法はありますか?他の提案はありますか?
ありがとう、
マイク