2015-01-11 2 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을 사용하여 매핑 할 수있는 옵션이 표시되지 않습니다.

그리고 ContactMethod 요소에는 Rule을 추가했지만 사용하지 않으려 고 노력했습니다. 나는 위

......

내가 물었다 단지 예입니다. datamapper에 일대일 매핑 아이디어가 필요합니다.

실제 이미지가 첨부 된 이미지를 참조하십시오. 내가 DataMapper과 직면을 사용하는 프로젝트를 유지하고

+0

당신이 당신의 조각을 검토 할 수 있습니다

다음은 의사 코드? 그냥 입력을 복제하려는 것 같습니다. –

+0

내 소스는 xml이고 대상은 json입니다. 이해하기 위해 나는 둘 다 xml이라고 설명했습니다. – Sahal

+0

@ VíctorRomero 나는 질문을 편집했다. – Sahal

답변

0

소스 및 대상의 Disclosure/CandidateDisclosure 요소 봐

.. 내 소스는 XML 및 대상은 JSON입니다,하지만 난이 필요로하는 실제 로직은 모든 ​​구조물과 유사 같은 문제. 이를 해결하기 위해 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();