0

我需要在 BizTalk 映射中的两个级别上使用条件循环,但我用于创建父数据的条件禁止创建子数据。

关于如何在 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 丛林?

我可以通过使用编排来解决这个问题,但我希望我在接收端口上将它作为一个映射运行,所以我非常想在一个映射中解决这个问题。

4

1 回答 1

1

xslt 没那么难。有很多情况下你会需要它。这是其中之一。帮自己一个忙,试试看。真的!

  • 右键单击变换
  • 在右键菜单中点击验证转换
  • 保存它生成的两个文件
  • 打开变换。左键单击背景网格。
  • 在属性窗口中输入两个文件的名称作为外部 xslt 和 xml。
  • 更新你的 xslt 以获得你需要的东西
  • debug xslt(从右键菜单中)是你的朋友
于 2013-04-24T19:56:30.920 回答