2015-06-26 27 views
0

您好我嘗試使用單個XSLT轉換來執行復雜的映射。但是我嘗試了每一種和應用模板,甚至無法接近要求。使用XSLT對特定元素進行分組,篩選和映射

以下是條件。

1)通過連接名字,姓氏和DEPTNO

2)在獨特僱員元件如果主接觸是「Y」移動電話號碼映射對應記錄到目標

3)如果PrimaryConcat組僱員元件如果'Y'和'N'不存在,則映射手機號碼,其中PrimaryConcat值爲'N'

4)如果'Y'和'N'都不存在,Dont映射手機號碼

將會有超過100萬個員工元素與地址,聯繫方式等進行輸入。我僅在這裏給出一個僅使用手機號碼的例子。

由於

INPUT XML

<Employees> 
    <Employee> 
     <PrimaryContact>Y</PrimaryContact> 
     <Name> 
      <FirstName>Paul</FirstName> 
      <LastName>Hecht</LastName> 
     </Name> 
     <DeptNo>10008072</DeptNo> 
     <MobNo>78952646</MobNo> 
    </Employee> 
    <Employee> 
     <PrimaryContact>N</PrimaryContact> 
     <endDate>0001-01-15T00:00:00.000Z</endDate> 
     <Name> 
      <FirstName>Paul</FirstName> 
      <LastName>Hecht</LastName> 
     </Name> 
     <DeptNo>10008072</DeptNo> 
     <MobNo>54646544</MobNo> 
    </Employee> 
    <Employee> 
     <PrimaryContact/> 
     <Name> 
      <FirstName>Chris</FirstName> 
      <LastName>Grey</LastName> 
     </Name> 
     <DeptNo>10001760</DeptNo> 
     <MobNo>1378956</MobNo> 
    </Employee> 
    <Employee> 
     <PrimaryContact>N</PrimaryContact> 
     <Name> 
      <FirstName>Chris</FirstName> 
      <LastName>Grey</LastName> 
     </Name> 
     <DeptNo>10001760</DeptNo> 
     <MobNo>78941236</MobNo> 
    </Employee> 
    <Employee> 
     <PrimaryContact/> 
     <Name> 
      <FirstName>Jessica</FirstName> 
      <LastName>Thruman</LastName> 
     </Name> 
     <DeptNo>10008022</DeptNo> 
     <MobNo>7895264446</MobNo> 
    </Employee> 
    <Employee> 
     <PrimaryContact/> 
     <Name> 
      <FirstName>Jessica</FirstName> 
      <LastName>Thruman</LastName> 
     </Name> 
     <DeptNo>10008022</DeptNo> 
     <MobNo>5464786544</MobNo> 
    </Employee> 
</Employees> 

預期輸出:

<Employees> 
    <Employee> 
     <Name> 
      <FirstName>Paul</FirstName> 
      <LastName>Hecht</LastName> 
     </Name> 
     <MobNo>78952646</MobNo> 
    </Employee> 
    <Employee> 
     <Name> 
      <FirstName>Chris</FirstName> 
      <LastName>Grey</LastName> 
     </Name> 
     <MobNo>78941236</MobNo> 
    </Employee> 
    <Employee> 
     <Name> 
      <FirstName>Jessica</FirstName> 
      <LastName>Thruman</LastName> 
     </Name> 
     <MobNo/> 
    </Employee> 
</Employees> 

回答

0

假設XSLT 2.0處理程序等撒克遜9 I試圖執行你的描述爲http://xsltransform.net/bdxtqL/1這確實

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="xml" encoding="UTF-8" indent="yes" /> 

    <xsl:template match="Employees"> 
     <xsl:copy> 
      <xsl:for-each-group select="Employee" group-by="string-join((Name/(FirstName, LastName), DeptNo), '|')"> 
       <xsl:copy> 
        <xsl:copy-of select="Name"/> 
        <MobNo> 
         <xsl:value-of select="(current-group()[PrimaryContact = 'Y']/MobNo, current-group()[PrimaryContact = 'N']/MobNo)[1]"/> 
        </MobNo> 
       </xsl:copy> 
      </xsl:for-each-group> 
     </xsl:copy> 
    </xsl:template> 

</xsl:transform> 

其中一個MobNo與您所期望的結果樣本不一樣,我不確定我是否不完全瞭解您的要求或者該樣本是否有誤。