ソース XML:
<r:root xmlns:r="http://root/">
<p:parent xmlns:p="http://parent/">
<p:name>John</name>
<p:age>30</age>
<c:child xmlns:c="http://child/">
<c:cname>John_child_1</cname>
<c:cage/>
<c:ItemNumber>1</ItemNumber>
</child>
<c:child xmlns:c="http://child/">
<c:cname>John_child_2</cname>
<c:cage/>
<c:ItemNumber>2</ItemNumber>
</child>
<c:child xmlns:c="http://child/">
<c:cname>John_child_3</cname>
<c:cage/>
<c:ItemNumber>1</ItemNumber>
</child>
</parent>
<p:parent>
<p:name>Doe</name>
<p:age>40</age>
<c:child xmlns:c="http://child/">
<c:cname>Doe_child_1</cname>
<c:cage/>
<c:ItemNumber>2</ItemNumber>
</child>
<c:child xmlns:c="http://child/">
<c:cname>Doe_child_2</cname>
<c:cage/>
<c:ItemNumber>2</ItemNumber>
</child>
</parent>
...
...
...
ターゲット XML:
<root>
<f:father xmlns:f="http://father/">
<f:name>John</name>
<f:age>30</age>
<f:UniqueItemNumber>1</UniqueItemNumber>
<c:child xmlns:c="http://child/">
<c:cname>John_child_1</cname>
<c:cage/>
<c:ItemNumber>1</ItemNumber>
</child>
<c:child xmlns:c="http://child/">
<c:cname>John_child_3</cname>
<c:cage/>
<c:ItemNumber>1</ItemNumber>
</child>
</father>
<f:father xmlns:f="http://father/">
<f:name>John</name>
<f:age>30</age>
<f:UniqueItemNumber>2</UniqueItemNumber>
<c:child xmlns:c="http://child/">
<c:cname>John_child_2</cname>
<c:cage/>
<c:ItemNumber>2</ItemNumber>
</child>
</father>
<f:father xmlns:f="http://father/">
<f:name>Doe</name>
<f:age>40</age>
<f:UniqueItemNumber>2</UniqueItemNumber>
<c:child xmlns:c="http://child/">
<c:cname>Doe_child_1</cname>
<c:cage/>
<c:ItemNumber>2</ItemNumber>
</child>
<c:child xmlns:c="http://child/">
<c:cname>Doe_child_2</cname>
<c:cage/>
<c:ItemNumber>2</ItemNumber>
</child>
</father>
....
...
XSLT を使用して、表示されているターゲット xml に変換したいソース xml があります。
ソースでは、それぞれが複数の子を含む複数の親要素を持つことができます。ターゲットを生成するには、まず、各親のすべての子の ItemNumber の個別のリストを見つける必要があります。したがって、ターゲット xml の父要素は、ソース xml の一意の ItemNumber ごとにマップする必要があります。これは、親ごとに ItemNumber でグループ化する SQL の group-by 句のようなものと言えます。この例で状況が説明されることを願っています。
私はあらゆる種類のことを試してきましたが、解決策に近づいていません。解決策を形成しているときに複数の問題が発生しています。したがって、キーは for-each(parent) 要素内で定義する必要があります。私はここで混乱しています。2. トップレベルの for-each(Parent) を持つべきだと思います。その中に、一意の ItemNumber を決定する方法があります。そして、親の名前を取得するために使用しようとすると、コントロールが 2 番目の for-each(uniqueItemNumber) 内にある場合、xpath (/name) が無効であるため、何も取得されません。問題を説明するのは難しい。
ここで解決できることを願っています。前もって感謝します。