2015-01-11 61 views
1

enter image description here我有一个输入XML和它只有一个Telephone子元素,一对骡子数据映射许多映射

<ContactMethod> 
       <Telephone type="fax"> 
        <Number>String</Number> 
        <Extension>String</Extension> 
       </Telephone> 
</ContactMethod> 

但我的输出XML有多个Telephone子元素,

<ContactMethod> 
        <Telephone type="fax"> 
         <Number>String</Number> 
         <Extension>String</Extension> 
        </Telephone> 
        <Telephone type="fax"> 
         <Number>String</Number> 
         <Extension>String</Extension> 
        </Telephone> 
    </ContactMethod> 

我想从输入元素Number映射到输出NumberExtension元素。

我无法更改模式,因为它是全局使用的。

我没有看到任何选项使用Element Mapping进行映射。

我试着用Rule加入ContactMethod元素,但没有运气。

......

上面我只是我问的例子。我需要在datamapper中有一对多的映射思路。

查看附件图片,这是我的实际需求。看看源和目的地的Disclosure/CandidateDisclosure元素

我的来源是XML和目标是JSON,但我需要实际的逻辑是所有结构相似..

+0

您可以查看片段?它看起来像你只是想复制输入 –

+0

我的源是xml和目标是json ..只是为了解我解释这两个都是xml。 – Sahal

+0

@VíctorRomero我编辑了这个问题.. – Sahal

回答

0

我保持其使用的DataMapper和面临的一个项目同样的问题。为了解决这个问题,我在DataMapper之后添加Java Transformer(您可以使用Groovy或其他脚本语言)来对一对多关系进行分组。

以下是伪代码:

provide empty telpMap 

foreach telpXml which is extracted from src/payload { 
    key = telpXml.get("@type"); 
    if (telpMap.containsKey(key)) { 
     List number = telpMap.get(key).get("Number"); 
     number.addAll(telpXml.get("Number")); 
     List extension = telpMap.get(key).get("Extension"); 
     extension.addAll(telpXml.get("Extension")); 
    } else { 
     telpMap.put(key, telpXml); 
    } 
} 

return telpMap.values();