0

我有一个循环节点 NationalityDet 包含多个当前前国籍或公民身份(CurrentNatCit)我需要确保当前国籍地图的所有国家值都转到国籍节点,并且当前公民身份映射到公民身份节点,所有前国籍/公民身份映射到 OtherNationality/OtherCitizenship(Citizenship 只允许一条记录,它是节点)。有任何想法吗?

源样本

<NationalityDet>
   <NatCit>
      <Type>NATIONALITY/CITIZENSHIP</Type>
      <Status>CURRENT/FORMER</Status>
      <Country>UK</Country>
   </NatCit>
   <OtherNatCit>
      <Type>NATIONALITY/CITIZENSHIP</Type>
      <Status>CURRENT/FORMER</Status>
      <Country>UK</Country>
   </OtherNatCit>
</NationalityDet>

目的地样本

<Person>
   <Person1>
      <Nationality>NATIONALITY/CURRENT</Nationality>
      <Nationality>NATIONALITY/CURRENT</Nationality>
      <Nationality>NATIONALITY/CURRENT</Nationality>
      <Citizenship>CITIZENSHIP/CURRENT</Citizenship>
      <Citizenship>CITIZENSHIP/CURRENT</Citizenship>
      <Citizenship>CITIZENSHIP/CURRENT</Citizenship>
      <OtherNationality>
         <Nationality>NATIONALITY/FORMER</Nationality>
         <Nationality>NATIONALITY/FORMER</Nationality>
         <Nationality>NATIONALITY/FORMER</Nationality>
      </OtherNationality>
      <OtherCitizenship>CITIZENSHIP/FORMER</OtherCitizenship>
   </Person1>
</Person>

目前已经使用了你提到的循环functoid和一些等号和&来允许这个映射。对于 TYPE=CITIZENSHIP 和 STATUS=FORMER 对于 OtherCitizenship 的两个不同父节点的节点计数,我陷入了困境。有什么想法吗?

4

1 回答 1

1

从您的问题和样本中,您还不清楚您想要映射的确切位置。

但是您可能需要的模式如下。添加一个循环functoid,它同时到达单例节点和重复节点。添加一个迭代 functoid,它指向一个等于 functoid 和一个大于 functoid,第二个固定值为 1,并分别映射到单例和重复节点。将源字段映射到这两个字段。

在此处输入图像描述

问题改变后更新。

因此,假设您有以下 XML

<NationalityDet>
    <NatCit>
        <Type>NATIONALITY</Type>
        <Status>CURRENT</Status>
        <Country>UK</Country>
    </NatCit>
    <NatCit>
        <Type>CITIZENSHIP</Type>
        <Status>CURRENT</Status>
        <Country>Netherlands</Country>
    </NatCit>
    <NatCit>
        <Type>NATIONALITY</Type>
        <Status>FORMER</Status>
        <Country>Brazil</Country>
    </NatCit>   
    <NatCit>
        <Type>CITIZENSHIP</Type>
        <Status>FORMER</Status>
        <Country>USA</Country>
    </NatCit>      
    <OtherNatCit>
        <Type>NATIONALITY</Type>
        <Status>CURRENT</Status>
        <Country>Australia</Country>
    </OtherNatCit>
    <OtherNatCit>
        <Type>CITIZENSHIP</Type>
        <Status>CURRENT</Status>
        <Country>New Zealand</Country>
    </OtherNatCit>
    <OtherNatCit>
        <Type>NATIONALITY</Type>
        <Status>FORMER</Status>
        <Country>Argentina</Country>
    </OtherNatCit>
    <OtherNatCit>
        <Type>CITIZENSHIP</Type>
        <Status>FORMER</Status>
        <Country>Germany</Country>
    </OtherNatCit>
</NationalityDet>

然后您的地图将如下所示。

然后您的地图将如下所示

我将解释突出显示的形状,其余的遵循相同的模式。从上到下,从左到右。

  1. 连接到 NatCit 和 OtherNatCit 并连接到 Nationality 的循环 functoid。
  2. 连接到 NatCit\Type 和值 NATIONALITY 的相等 functoid
  3. 连接到 NatCit\Status 和值 CURRENT 的相等 functoid
  4. 链接到 OtherNatCit\Type 和值 NATIONALITY 的相等 functoid
  5. 链接到 OtherNatCit\Status 和值 CURRENT 的相等 functoid
  6. 与 NatCit 的两个相等的 functoid 对齐的 AND functoid
  7. 与 OtherNatCit 的两个相等的 functoid 对齐的 AND functoid
  8. 一个值映射 functoid 链接到从 NatCit 和 NatCit\Country 到 Person1\Nationality 的 AND。
  9. 一个值映射 functoid 链接到从 OtherNatCit 和 OtherNatCit\Country 到 Person1\Citizenship 的 AND。

然后我复制了第一组并将 NATIONALITY 更改为 CITIZENSHIP 并链接到相同的输入字段,但将值映射的输出放入 Citizenship。

然后我复制了第一组并将 CURRENT 更改为 FORMER 并链接到相同的输入字段,但将值映射的输出放置到 OtherNationality\Nationality。

然后我复制了第二组(具有 CITIZENSHIP )并将 CURRENT 更改为 FORMER 并链接到相同的输入字段,但将值映射的输出放入 OtherCitenship。

下面是输出。

<Person>
    <Person1>
        <Nationality>UK</Nationality>
        <Nationality>Australia</Nationality>
        <Citizenship>Netherlands</Citizenship>
        <Citizenship>New Zealand</Citizenship>
        <OtherNationality>
            <Nationality>Brazil</Nationality>
            <Nationality>Argentina</Nationality>
        </OtherNationality>
        <OtherCitizenship>USA</OtherCitizenship>
        <OtherCitizenship>Germany</OtherCitizenship>
    </Person1>
</Person>
于 2014-03-17T01:49:16.690 回答