2017-05-01 13 views
0

중복 employeeNumber가있는 노드가 포함 된 XML 파일이 있습니다. 나는 첫 번째 기록 만 필요로한다. 같은 employeeNumber를 가진 두 번째 레코드를 어떻게 제거합니까? 어떤 도움이라도 대단히 감사합니다.xslt 2.0 중복 제거

샘플 XML 파일

<?xml version='1.0' encoding='UTF-8'?> 
<cd:Report_Data xmlns:cd="urn:com.comday.report/INT007BOutbound"> 
    <cd:Report_Entry> 
     <cd:displayName>Sarah Smith</cd:displayName> 
     <cd:employeeNumber>97061</cd:employeeNumber> 
     <cd:employeeType>CL</cd:employeeType> 
     <cd:CF_-_Current_employeeType>CL</cd:CF_-_Current_employeeType> 
     <cd:ont-startdate>20131018</cd:ont-startdate> 
     <cd:ont-enddate>20160301</cd:ont-enddate> 
    </cd:Report_Entry> 
    <cd:Report_Entry> 
     <cd:displayName>Danny Jones</cd:displayName> 
     <cd:employeeNumber>97062</cd:employeeNumber> 
     <cd:employeeType>EMP</cd:employeeType> 
     <cd:CF_-_Current_employeeType>EMP</cd:CF_-_Current_employeeType> 
     <cd:ont-startdate>20170501</cd:ont-startdate> 
     <cd:ont-enddate>20670501</cd:ont-enddate> 
    </cd:Report_Entry> 
    <cd:Report_Entry> 
     <cd:displayName>Danny Jones</cd:displayName> 
     <cd:employeeNumber>97062</cd:employeeNumber> 
     <cd:employeeType>CL</cd:employeeType> 
     <cd:CF_-_Current_employeeType>CL</cd:CF_-_Current_employeeType> 
     <cd:ont-startdate>20131112</cd:ont-startdate> 
     <cd:ont-enddate>20140620</cd:ont-enddate> 
    </cd:Report_Entry> 
    <cd:Report_Entry> 
     <cd:displayName>David Jenkins</cd:displayName> 
     <cd:employeeNumber>97063</cd:employeeNumber> 
     <cd:employeeType>EMP</cd:employeeType> 
     <cd:CF_-_Current_employeeType>EMP</cd:CF_-_Current_employeeType> 
     <cd:ont-startdate>20131118</cd:ont-startdate> 
     <cd:ont-enddate>20631118</cd:ont-enddate> 
    </cd:Report_Entry> 
</cd:Report_Data> 

샘플 XSL 파일

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:strip-space elements="*"/> 
    <xsl:output indent="no" method="text"/> 
    <xsl:template match="cd:Report_Data" xmlns:cd="urn:com.comday.report/INT007BOutbound"> 
     <!--These are just text column headers for output--> 
     <xsl:text>displayName,employeeNumber,employeeType</xsl:text> 
<xsl:call-template name="insertNewLine"/> 
     <xsl:for-each select="cd:Report_Entry"> 
      <xsl:variable name="date"> 
       <xsl:value-of select="format-date(current-date(),'[Y0001][M01][D01]')"/>  
      </xsl:variable> 
      <xsl:choose> 
       <xsl:when test="$date &lt; cd:ont-startdate or cd:ont-enddate &lt; $date"> 
        <xsl:value-of select="replace(cd:displayName,',',' ')"/> 
        <xsl:call-template name="insertDelimiter"/> 
        <xsl:value-of select="cd:employeeNumber"/> 
        <xsl:call-template name="insertDelimiter"/> 
        <xsl:value-of select="cd:employeeType"/> 
       </xsl:when> 
      </xsl:choose> 
      <xsl:choose> 
       <xsl:when test="cd:ont-startdate &lt;= $date and $date &lt;= cd:ont-enddate"> 
        <xsl:value-of select="replace(cd:displayName,',',' ')"/> 
        <xsl:call-template name="insertDelimiter"/> 
        <xsl:value-of select="cd:employeeNumber"/> 
        <xsl:call-template name="insertDelimiter"/> 
        <xsl:value-of select="cd:CF_-_Current_employeeType"/> 
       </xsl:when> 
      </xsl:choose> 
      <xsl:call-template name="insertNewLine"/> 
     </xsl:for-each> 
    </xsl:template> 
<!--****************************************--> 
<!-- Starting function library section here --> 
    <xsl:template name="insertDelimiter"> 
     <xsl:text>,</xsl:text> 
    </xsl:template> 
<!--****************************************--> 
    <xsl:template name="insertNewLine"> 
<!-- Used to insert a new line into the XML output --> 
     <xsl:text>&#xA;</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 
+0

'xsl : when'로직이 필요합니까, 아니면 중복 제거하려는 부분입니까? 또한 이것은 csv 로의 변환입니까? – Parfait

답변

1

<xsl:for-each select="cd:Report_Entry"><xsl:for-each-group select="cd:Report_Entry" group-by="cd:employeeNumber">에 (그리고 종료 태그 </xsl:for-each> 다음 물론 <xsl:for-each-group>로) 변경합니다.

+0

그게 꼭 필요한만큼 나를 고정시켰다. 답변 감사합니다. 그렇게 간단하고 나는 복잡한 것을 찾고있었습니다! – blulew

+1

@blulew - [이 대답 수락] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)을 고려하십시오. 자세한 내용은 http://stackoverflow.com/help/someone-answers를 참조하십시오. –