2017-10-18 16 views
1

私のXML入力がある:その従業員の21002には2つのノードがありマージXMLノード

<?xml version="1.0" encoding="UTF-8"?> 
<Root> 
    <Row> 
     <EmployeeID>21001</EmployeeID> 
     <FMLAStartDate>2017-10-10</FMLAStartDate> 
     <FMLAEndDate></FMLAEndDate> 
     <FMLACorrectDate></FMLACorrectDate> 
     <LTDStartDate></LTDStartDate> 
     <LTDEndDate></LTDEndDate>  
     <LTDCorrectdate></LTDCorrectdate> 
    </Row> 

    <Row> 
     <EmployeeID>21002</EmployeeID> 
     <FMLAStartDate>2017-10-10</FMLAStartDate> 
     <FMLAEndDate></FMLAEndDate> 
     <FMLACorrectDate></FMLACorrectDate> 
     <LTDStartDate></LTDStartDate> 
     <LTDEndDate></LTDEndDate>  
     <LTDCorrectdate></LTDCorrectdate> 
    </Row> 

    <Row> 
     <EmployeeID>21002</EmployeeID> 
     <FMLAStartDate></FMLAStartDate> 
     <FMLAEndDate></FMLAEndDate> 
     <FMLACorrectDate></FMLACorrectDate> 
     <LTDStartDate></LTDStartDate> 
     <LTDEndDate>2017-10-08</LTDEndDate>  
     <LTDCorrectdate></LTDCorrectdate> 
    </Row> 

    <Row> 
     <EmployeeID>21003</EmployeeID> 
     <FMLAStartDate></FMLAStartDate> 
     <FMLAEndDate></FMLAEndDate> 
     <FMLACorrectDate></FMLACorrectDate> 
     <LTDStartDate>2017-05-01</LTDStartDate> 
     <LTDEndDate></LTDEndDate>  
     <LTDCorrectdate></LTDCorrectdate> 
    </Row> 

    <Row> 
     <EmployeeID>21004</EmployeeID> 
     <FMLAStartDate></FMLAStartDate> 
     <FMLAEndDate></FMLAEndDate> 
     <FMLACorrectDate>2017-01-10</FMLACorrectDate> 
     <LTDStartDate></LTDStartDate> 
     <LTDEndDate></LTDEndDate>  
     <LTDCorrectdate></LTDCorrectdate> 
    </Row> 
</Root> 

注、1 LTD終了日を保持FMLA開始日を保持し、他の。ポストXSLT変換の期待は、従業員IDごとに1つの行ノードを持ち、この行ノードはその従業員IDの情報全体を保持する必要があります。したがって予想される出力は、次のとおりです。私は、各グループの従業員IDベースのグループ化しようとしているが、それは正しい出力が得られない

<?xml version="1.0" encoding="UTF-8"?> 
<Root> 
    <Row> 
    <EmployeeID>21001</EmployeeID> 
    <FMLAStartDate>2017-10-10</FMLAStartDate> 
    <FMLAEndDate></FMLAEndDate> 
    <FMLACorrectDate></FMLACorrectDate> 
    <LTDStartDate></LTDStartDate> 
    <LTDEndDate></LTDEndDate>  
    <LTDCorrectdate></LTDCorrectdate> 
    </Row> 

    <Row> 
    <EmployeeID>21002</EmployeeID> 
    <FMLAStartDate>2017-10-10</FMLAStartDate> 
    <FMLAEndDate></FMLAEndDate> 
    <FMLACorrectDate></FMLACorrectDate> 
    <LTDStartDate></LTDStartDate> 
    <LTDEndDate>2017-10-08</LTDEndDate>  
    <LTDCorrectdate></LTDCorrectdate> 
    </Row> 

    <Row> 
    <EmployeeID>21003</EmployeeID> 
    <FMLAStartDate></FMLAStartDate> 
    <FMLAEndDate></FMLAEndDate> 
    <FMLACorrectDate></FMLACorrectDate> 
    <LTDStartDate>2017-05-01</LTDStartDate> 
    <LTDEndDate></LTDEndDate>  
    <LTDCorrectdate></LTDCorrectdate> 
    </Row> 

    <Row> 
    <EmployeeID>21004</EmployeeID> 
    <FMLAStartDate></FMLAStartDate> 
    <FMLAEndDate></FMLAEndDate> 
    <FMLACorrectDate>2017-01-10</FMLACorrectDate> 
    <LTDStartDate></LTDStartDate> 
    <LTDEndDate></LTDEndDate>  
    <LTDCorrectdate></LTDCorrectdate> 
    </Row> 
</Root> 

。誰もがこれで私を助けてくれる?私はXSLTの基本的な知識は持っていますが、高度なXSLTの機能は扱っていません。

ありがとうございます!

+0

コードを表示しない限り、コード内のバグを見つけることができません。 –

答えて

0

あなたはグループ各フィールドのすべての値の行と連結することができます:私は

<xsl:template match="/Root"> 
    <xsl:for-each-group select="Row" group-by="EmployeeID"> 
     <Row> 
     <xsl:for-each-group select="current-group()/*" 
          group-by="node-name()"> 
      <xsl:copy-of select="(current-group()[normalize-space()], 
           current-group()[not(normalize-space()])[1]"/> 
     </Row> 
    </xsl:for-each-group> 
    </xsl:template> 

を行うだろう

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:template match="/Root"> 
    <xsl:for-each-group select="Row" group-by="EmployeeID"> 
     <Row> 
     <EmployeeID> 
      <xsl:value-of select="current-grouping-key()"/> 
     </EmployeeID> 
     <FMLAStartDate> 
      <xsl:value-of select="current-group()/FMLAStartDate"/> 
     </FMLAStartDate> 
     <FMLAEndDate> 
      <xsl:value-of select="current-group()/FMLAEndDate"/> 
     </FMLAEndDate> 
     <FMLACorrectDate> 
      <xsl:value-of select="current-group()/FMLACorrectDate"/> 
     </FMLACorrectDate> 
     <LTDStartDate> 
      <xsl:value-of select="current-group()/LTDStartDate"/> 
     </LTDStartDate> 
     <LTDEndDate> 
      <xsl:value-of select="current-group()/LTDEndDate"/> 
     </LTDEndDate> 
     <LTDCorrectdate> 
      <xsl:value-of select="current-group()/LTDCorrectdate"/> 
     </LTDCorrectdate> 
     </Row> 
    </xsl:for-each-group> 
    </xsl:template> 
</xsl:stylesheet> 
+0

ありがとうございました! –

0

を:同じ従業員IDの従業員レコードのグループごとに、出力をグループ内の従業員要素のいずれかまたはすべてに存在する各要素について、空でない内容を優先してこれらのうちの1つのコピーを出力します。