我有一个输入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
映射到输出Number
以及Extension
元素。
我无法更改架构,因为它是全局使用的。
我没有看到使用Element Mapping
映射的任何选项。
我尝试将Rule
添加到ContactMethod
元素,但没有运气。
...
上面我就是我问的例子。我需要datamapper
中的一对多映射构思。
参见附图,这是我的实际要求。查看源和目标中的Disclosure/CandidateDisclosure
元素
我的源代码是XML,目标是JSON,但我需要的实际逻辑类似于所有结构..
答案 0 :(得分: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();