BizTalk:2级的条件循环

时间:2013-04-17 06:31:55

标签: loops map conditional biztalk

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

有关如何在BizTalk映射器中映射以下内容的任何想法:

输入

评论:<组>和< 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>

输出

评论:&lt; Row&gt;元素应该在&lt; Group&gt;下元件。

 <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>

创建子元素&lt; Row&gt;在输出中非常简单,我使用一个条件来检查输入&lt; Line / Name&gt; =“Row”然后映射输入元素中的内容&lt; Line&gt;输出元素&lt; Row&gt;。

问题是当我使用相同的逻辑来创建输出父元素&lt; Group&gt;时。如果我检查是否输入&lt; Line / Name&gt; =“Group”,这将正确地创建输出元素&lt; Group&gt;,但是当这个条件未完全填充时(即Name = Row),这也将禁止创建childelement&lt; ;行&gt;,因此产生以下输出:

 <Group>
      <Row />
      <Name>Group</Name>
      <RowNo>1</RowNo>
 </Group>
 <Group>
      <Row />
      <Name>Group</Name>
      <RowNo>2</RowNo>
 </Group>

有人能指出我正确的方向吗?或者这是否会迫使我进入XSLT丛林?

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

1 个答案:

答案 0 :(得分:1)

xslt不 很难。有很多情况需要它。这是其中之一。帮自己一个忙,试一试。真!

  • 右键点击转换
  • 点击右键菜单中的验证转换
  • 保存它生成的两个文件
  • 打开变换。左键单击背景网格。
  • 在属性窗口中输入两个文件的名称作为外部xslt和xml。
  • 更新您的xslt以获得您需要的内容
  • debug xslt(来自右键菜单)是你的朋友