2016-03-22 26 views
1

Varolan haritanızda, kaynak şemadan bir kişiyi, hedef şemadaki bir kişi ile, türüne ve diğer bir çok mantıka bağlı olarak, haritanın içindeki functoids kullanarak dönüştürür. Hedef şemadan yakın zamanda yapılan bir değişiklikle, verileri gruplayabilmemiz için bir anahtar (kılavuz) düğümü kullanmak için dönüşümü değiştirmem gerekiyor.BizTalk Map Group Kişisine göre Anahtar

// Kişi */[Anahtar = aynı] gibi bir şey için satır içi XSLT komut dosyası uygulamak istiyorum ancak bunun için XSLT'den emin değilim.

Örnek giriş: şu anda

<Person> 
    <PersonType>PartnerParentsFarther</PersonType> 
    <Name> 
     <title>MR</title> 
     <Gender>MALE</Gender> 
     ... 
    </Name> 
    <Address/> 
    <PersonKey> 
     <Key>a1093c4a-7c53-4de5-ad30-cb4140aec58</Key> 
     <ParentKey/> 
    </PersonKey> 
</Person> 
<Person> 
    <PersonType>PartnerParentsMother</PersonType> 
    <Name> 
     <title>MRS</title> 
     <Gender>FEMALE</Gender> 
     ... 
    </Name> 
    <Address/> 
    <PersonKey> 
     <Key>a1093c4a-7c53-4de5-ad30-cb4140aec58</Key> 
     <ParentKey/> 
    </PersonKey> 
</Person> 
<Person> 
    <PersonType>PartnerParentsFarther</PersonType> 
    <Name> 
     <title>MR</title> 
     <Gender>MALE</Gender> 
     ... 
    </Name> 
    <Address/> 
    <PersonKey> 
     <Key>a1093c4a-7c53-4de5-ad30-cb4140aec59</Key> 
     <ParentKey/> 
    </PersonKey> 
</Person> 
<Person> 
    <PersonType>PartnerParentsMother</PersonType> 
    <Name> 
     <title>MRS</title> 
     <Gender>FEMALE</Gender> 
     ... 
    </Name> 
    <Address/> 
    <PersonKey> 
     <Key>a1093c4a-7c53-4de5-ad30-cb4140aec59</Key> 
     <ParentKey/> 
    </PersonKey> 
</Person> 

Örnek çıktı:

<PartnerParents> 
    <Father> 
     <Title>MR</Title> 
     <Gender>MALE</Gender> 
    </Father> 
    <Father> 
     <Title>MR</Title> 
     <Gender>MALE</Gender> 
    </Father> 
    <Mother> 
     <Title>MRS</Title> 
     <Gender>FEMALE</Gender> 
    </Mother> 
    <Mother> 
     <Title>MRS</Title> 
     <Gender>FEMALE</Gender> 
    </Mother> 
</PartnerParents> 

Örnek gerekli çıkış, aynı anahtar değerlerine göre

<PartnerParents> 
    <Father> 
     <Title>MR</Title> 
     <Gender>MALE</Gender> 
    </Father> 
    <Mother> 
     <Title>MRS</Title> 
     <Gender>FEMALE</Gender> 
    </Mother> 
</PartnerParents> 
<PartnerParents> 
    <Father> 
     <Title>MR</Title> 
     <Gender>MALE</Gender> 
    </Father> 
     <Mother> 
     <Title>MRS</Title> 
     <Gender>FEMALE</Gender> 
    </Mother> 
</PartnerParents> 
+1

Bu gruplama soru gibi görünüyor. Bkz: http://www.jenitennison.com/xslt/grouping/muenchian.html –

cevap

1

zaman bu XSLT 1.0 çözeltisi:

<xsl:key name="groups" match="Test/Person/PersonKey/Key/text()" use="."/> 

    <xsl:template match="/"> 
    <xsl:apply-templates select="/Test" /> 
    </xsl:template> 

<xsl:template match="/Test"> 
<Test> 
    <xsl:for-each select="Person/PersonKey/Key/text()[generate-id()=generate-id(key('groups',.))]"> 
    <PartnerParents> 
     <Father> 
     <xsl:for-each select="key('groups',.)"> 
      <xsl:if test="../../../Name/Gender/text() = 'MALE'"> 
      <Title> 
       <xsl:value-of select="../../../Name/title/text()" /> 
      </Title> 
      <Gender> 
       <xsl:value-of select="../../../Name/Gender/text()" /> 
      </Gender> 
      </xsl:if> 
     </xsl:for-each> 
     </Father> 
     <Mother> 
     <xsl:for-each select="key('groups',.)"> 
      <xsl:if test="../../../Name/Gender/text() = 'FEMALE'" > 
      <Title> 
       <xsl:value-of select="../../../Name/title/text()" /> 
      </Title> 
      <Gender> 
       <xsl:value-of select="../../../Name/Gender/text()" /> 
      </Gender> 
      </xsl:if> 
     </xsl:for-each> 
     </Mother> 
    </PartnerParents > 
    </xsl:for-each> 
</Test> 

... aşağıda XML uygulanır:

<Test> 
    <Person> 
    <PersonType>PartnerParentsFarther</PersonType> 
    <Name> 
     <title>MR</title> 
     <Gender>MALE</Gender> 
    </Name> 
    <Address/> 
    <PersonKey> 
     <Key>a1093c4a-7c53-4de5-ad30-cb4140aec58</Key> 
     <ParentKey/> 
    </PersonKey> 
</Person> 
<Person> 
    <PersonType>PartnerParentsMother</PersonType> 
    <Name> 
    <title>MRS</title> 
    <Gender>FEMALE</Gender> 
    </Name> 
    <Address/> 
    <PersonKey> 
     <Key>a1093c4a-7c53-4de5-ad30-cb4140aec58</Key> 
     <ParentKey/> 
    </PersonKey> 
</Person> 
<Person> 
    <PersonType>PartnerParentsFarther</PersonType> 
    <Name> 
    <title>MR</title> 
    <Gender>MALE</Gender> 
    </Name> 
    <Address/> 
    <PersonKey> 
    <Key>a1093c4a-7c53-4de5-ad30-cb4140aec59</Key> 
    <ParentKey/> 
</PersonKey> 
</Person> 
<Person> 
    <PersonType>PartnerParentsMother</PersonType> 
    <Name> 
    <title>MRS</title> 
    <Gender>FEMALE</Gender> 
    </Name> 
    <Address/> 
    <PersonKey> 
    <Key>a1093c4a-7c53-4de5-ad30-cb4140aec59</Key> 
    <ParentKey/> 
    </PersonKey> 
</Person> 
</Test> 

... istenilen sonucu üretilen:

<Test> 
<PartnerParents> 
    <Father> 
    <Title>MR</Title> 
    <Gender>MALE</Gender> 
    </Father> 
    <Mother> 
    <Title>MRS</Title> 
    <Gender>FEMALE</Gender> 
    </Mother> 
</PartnerParents> 
<PartnerParents> 
    <Father> 
    <Title>MR</Title> 
    <Gender>MALE</Gender> 
    </Father> 
    <Mother> 
    <Title>MRS</Title> 
    <Gender>FEMALE</Gender> 
    </Mother> 
</PartnerParents> 
</Test> 
+0

Bazı verilerde anahtarın eksik olacağı ve bu nedenle de anahtar eşlemenin olmadığı verilerin haritalandırılması için ihtiyaç duyduğum görülüyor. . Şu an için Ana anahtarını kontrol ediyorum = '' ancak diğer ana anahtar ve anahtar çifti ile uyumlu bir şablona nasıl eklendiğini öğrenmek için herhangi bir fikri bir araya getirmem gerekiyor. – PuffTMD