0

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 つのマップで解決したいと考えています。

4

1 に答える 1

1

xslt はそれほど難しくありません。必要になる場面はたくさんあります。これはそれらの1つです。自分に好意を持って試してみてください。本当!

  • トランスフォームを右クリック
  • 右クリック メニューで [変換の検証] をクリックします。
  • 生成された 2 つのファイルを保存します
  • トランスフォームを開きます。背景グリッドを左クリックします。
  • プロパティ ウィンドウで、2 つのファイルの名前を外部 xslt および xml として入力します。
  • 必要なものを取得するために xslt を更新します
  • debug xslt (右クリック メニューから) はあなたの友達です
于 2013-04-24T19:56:30.920 に答える