2016-03-22 6 views
1

私の既存のマップは、種類と他の数のログに基づいて、マップ内のFunctoidを使用して、ソーススキーマの人を宛先スキーマの人に変換します。デスティネーションスキーマからの最近の変更では、データをグループ化できるようにキー(guid)ノードを使用するように変換を修正する必要があります。BizTalkマップグループキー別人

私はインラインXSLTスクリプトを// Person */[Key = same]のように実装したいと思いますが、XSLTではこれについてはわかりません。

例入力:

<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> 

現在出力例:同じキー値に基づい

<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> 

例要求出力:

<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

これは、グループ化の問題であるように思われます。参照:http://www.jenitennison.com/xslt/grouping/muenchian.html –

答えて

1

このXSLT 1.0溶液:

<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> 

...以下のXMLに適用されます。

<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> 

...指名手配結果が生成されます

<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

データの中にはキーがないものがあることが判明しているため、キーマッピングがない場合でもデータをマッピングする必要があります。私は現在、親キー= ''をチェックしていますが、他の親キーとキーペアの組み合わせに合わせてテンプレートに追加する方法を考えなければなりません。 – PuffTMD