2015-01-11 66 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();