2014-09-16 13 views
1

biztalk 매퍼를 사용하면 대상 노드가 복제되어야합니다. 내 문제의 단순화 된 버전을 만들었습니다. 원본 및 대상 스키마에 대한지도 링크 아래를 참조하십시오. 미안하지만 이미지 게시 지점이 충분하지 않습니다.Biztalk Map 중복 대상 노드 만들기

각 OptionNotes에 대해 대상 노드를 복제해야합니다. OptionNotes의 값은 파이프 ("|")로 분리 된 다음 대상 코드 및 설명에 매핑됩니다.

입력은 아래와 같다 :

<ns0:Source xmlns:ns0="http://Test.SOAP.Source1"> 
    <Option> 
    <OptionID>ID0_NoNotes</OptionID> 
    <OptionName>OptionName_0</OptionName> 
    </Option> 
    <Option> 
    <OptionID>ID1_NoNotes</OptionID> 
    <OptionName>OptionName_1</OptionName> 
    <OptionNotes>NOTE1|BLAH1</OptionNotes> 
    <OptionNotes>NOTE2|BLAH2</OptionNotes> 
    </Option> 
</ns0:Source> 

출력은 아래와 같아야

<Destination> 
    <Options> 
     <Option> 
      <Code>ID0_NoNotes</Code> 
      <Description>OptionName_0</Description> 
     </Option> 
     <Option> 
      <Code>ID1_NoNotes</Code> 
      <Description>OptionName_1</Description> 
     </Option> 
     <Option> 
      <Code>NOTE1</Code> 
      <Description>BLAH1</Description> 
     </Option> 
     <Option> 
      <Code>NOTE2</Code> 
      <Description>BLAH2</Description> 
     </Option>  
    </Options> 
</Destination> 

설정치 매핑 루핑 및 조합을 사용했지만, 소용. 인라인 xslt에 의존해야합니까?

+1

(저는 BizTalk에 대해 아무것도 모릅니다.) XML을 변환하는 데 XSLT를 사용하지 않는 이유는 무엇입니까? 그것이 바로 그 때문입니다. –

+0

열렬한 BizTalker로서 항상 매퍼 (mapper), 항상 XSLT를 사용하지만, 다시 한 번 질문은 매퍼 (mapper)에 있으며, XSLT에서 수행하는 방법이 아닙니다. –

+0

@PieterVandenheede XSLT 태그가 붙은 이유는 무엇입니까? –

답변

0

우리는 이것을 쉽게 수행 한 Mapforce를 사용했습니다. 그런 다음 XSLT를 가져 와서 Inline XSLT scripting functoid의 일부로 가져옵니다.

생산 된 XSLT

은 다음과 같습니다이었다

<xsl:for-each select="ns0:Source/Option"> 
<Option> 
<xsl:for-each select="OptionID"> 
<Code> 
<xsl:value-of select="string(.)"/> 
</Code> 
</xsl:for-each> 
<xsl:for-each select="OptionName"> 
<Description> 
<xsl:value-of select="string(.)"/> 
</Description> 
</xsl:for-each> 
</Option> 
</xsl:for-each> 
<xsl:for-each select="ns0:Source/Option/OptionNotes"> 
<xsl:variable name="var1_resultof_cast" select="string(.)"/> 
<Option> 
<Code> 
<xsl:value-of select="substring-before($var1_resultof_cast, '|')"/> 
</Code> 
<Description> 
<xsl:value-of select="substring-after($var1_resultof_cast, '|')"/> 
</Description> 
</Option> 
</xsl:for-each> 

감사합니다 여러분.