2015-02-01 4 views
0

난 이후이 일부 노드가 예상된다XML 노드를 XML 행으로 피벗시키는 방법은 무엇입니까?

<employee> 
    <number>123</number> 
    <values> 
    <value> 
     <name>FIRST_NAME</name> 
     <value>Bob</value> 
    </value> 
    <value> 
     <name>LAST_NAME</name> 
     <value>Smith</value> 
    </value> 
    <value> 
     <name>SOMETHING_ELSE</name> 
     <value>Weakly mapped</value> 
    </value> 
    <value> 
     <name>SOME_OTHER_VALUE</name> 
     <value>Also weakly mapped</value> 
    </value> 
    </value> 
</employee> 

, EMP_NO입니다 같은 LAST_NAME 등 FIRST_NAME,

<employee> 
    <EMP_NO>1234</EMP_NO> 
    <FIRST_NAME>Bob</FIRST_NAME> 
    <SOMETHING_ELSE>Weakly mapped</SOMETHING_ELSE> 
    <SOME_OTHER_VALUE>Also weakly mapped</SOME_OTHER_VALUE> 
    <LAST_NAME>Smith</LAST_NAME> 
</employee> 

출력으로 하드 코딩 된 요소 이름을 가진 XML 파일이, first_namelast_name 그리고 입력과 일치시키기 위해 해당 노드의 XML dest에서 XML dest 로의 명시적인 매핑을 만듭니다.

다음에 달성해야 할 것은 모든 매핑되지 않은 노드가 내 대상 XML에도 항목을 추가하는 것입니다. 새 노드가 오면 대상 XML에도 추가됩니다.

수동으로 노드를 수동으로 선택하고 항목으로 변환하는 빠른 방법을 원합니다. 그렇지 않으면 수동으로 노드를 대상에 추가하고 이름을 연결하는 데 몇 시간을 소비해야합니다.) 및 소스 노드의 값.

이 내가 지금하는 데 물건의 종류

...

Manual approach

이 나에게 시간이 걸릴 것입니다 수백 개의 노드에 분명히

, 내가 만들 파일의 번호를 가지고 그것이 나를위한 날 걸릴 것입니다. 정말 이상과 같은

Desired approach

답변

0

사용자 정의, 수입 인라인 XSL 템플릿, 그리고 약간의 수정과 MapForce 당신이 원하는 일을 할 수 있습니다 ... 이런 식으로 뭔가를 할 수있을 것 범위 스키마. 그것은 MapForce에서 이것을하기위한 약간의 해킹이고, 아마 손으로 쓰는 xsl 변환을 사용하는 것이 더 쉽고 더 깔끔합니다. (파일에서, 예를 들어, custom.xsl) 사용자 정의 템플릿

시작 :이 템플릿은 여러 아이들과 함께 하나의 요소를 생성하는

<xsl:template name="metaItemIterate"> 
    <xsl:param name="employeeNode"/> 
    <xsl:for-each select="$employeeNode/*"> 
     <xsl:element name="metaItem"> 
      <xsl:element name="name"> 
       <xsl:value-of select="local-name(.)"/> 
      </xsl:element> 
      <xsl:element name="value"> 
       <xsl:value-of select="."/> 
      </xsl:element> 
     </xsl:element> 
    </xsl:for-each> 
</xsl:template> 

참고.

그런 다음 라이브러리/제거 추가를 사용 ... 당신은 다른 방법 단지 필요한 하위 요소를 생성 할 수 있고, 그들을 따라 링크 (라이브러리 아래에 있음) 버튼을 라이브러리로 XSL 파일을 추가 할 수 있습니다.

드래그 새로운 범위 및 스키마 도메인 간의 함수와 employeeNodeemployee 노드 clientDefinedMetaData하는 기능의 result 연결한다.

example of mapping with custom function between schemas

참고는 아래의 임의 요소의 생성을 허용하기 위해 clientDefinedMetaData에 대한 스키마 정의에 속성 mixed="true"을 추가해야 할 수 있습니다.

는 내가 출력 탭을 클릭에서 데이터를 얻을 출력

:, 아마 당신이 아래의 혼합 요소를 허용하도록 스키마 정의를 변경할 수없는 경우, 또한

example of output as generated from MapForce

을하지 않습니다 MapForce를 사용하여 다른 방법으로이 작업을 수행 할 수 있습니다.

+0

특정 요소를 선택하고 선택해야하는 경우 해당 코드를 호출 된 템플릿에 추가 할 수 있습니다 (예 : 노드에 값이 있으면 요소를 생성합니다. –

관련 문제