BizTalk マップの 2 つのレベルで条件付きループを使用する必要がありますが、親データの作成に使用する条件が子データの作成を妨げています。
BizTalk マッパーで以下をマップする方法に関するアイデア:
入力
コメント: <Group> 要素と <Row> 要素は同じレベルにあります。
<Line> <Name>Group</Name> <RowNo>1</RowNo> </Line> <Line> <Name>Row</Name> <RowNo>1</RowNo> </Line> <Line> <Name>Row</Name> <RowNo>2</RowNo> </Line> <Line> <Name>Group</Name> <RowNo>2</RowNo> </Line> <Line> <Name>Row</Name> <RowNo>1</RowNo> </Line> <Line> <Name>Row</Name> <RowNo>2</RowNo> </Line>
出力
コメント: <Row> 要素は <Group> 要素の下にある必要があります。
<Group> <Name>Group</Name> <RowNo>1</RowNo> <Row> <Name>Row</Name> <RowNo>1</RowNo> </Row> <Row> <Name>Row</Name> <RowNo>2</RowNo> </Row> </Group> <Group> <Name>Group</Name> <RowNo>2</RowNo> <Row> <Name>Row</Name> <RowNo>1</RowNo> </Row> <Row> <Name>Row</Name> <RowNo>2</RowNo> </Row> </Group>
出力に子要素 <Row> を作成するのは非常に簡単です。入力 <Line/Name>="Row" かどうかをチェックする条件を使用してから、入力要素 <Line> のコンテンツを出力要素 <Row> にマップします。
問題は、同じロジックを使用して出力親要素 <Group> を作成する場合です。入力 <Line/Name>="Group" を確認すると、出力要素 <Group> が正しく作成されますが、この条件が満たされない場合 (つまり、Name=Row)、子要素 <Row> の作成も禁止されます。 、したがって、次の出力が得られます。
<Group> <Row /> <Name>Group</Name> <RowNo>1</RowNo> </Group> <Group> <Row /> <Name>Group</Name> <RowNo>2</RowNo> </Group>
誰かが私を正しい方向に向けることができますか? それとも、私を XSLT ジャングルに引きずり込むことになるのでしょうか?
オーケストレーションを使用してこれを解決できますが、これを受信ポートでマップとして実行することが望まれるため、これを 1 つのマップで解決したいと考えています。