XSLT 1.0删除备用重复记录

时间:2018-01-12 03:29:02

标签: xml xslt muenchian-grouping

我正在尝试使用XSLT 1.0从xml中删除备用重复记录。下面是我正在使用的XML。

<FileRead xmlns="http://TargetNamespace.com/EmpDetails">
   <EmployeeInformation>
      <Empl_ID>63496</Empl_ID>
      <Record_Updated_Date>7/19/2017</Record_Updated_Date>
   </EmployeeInformation>
   <EmployeeInformation>
      <Empl_ID>63496</Empl_ID>
      <Record_Updated_Date>8/19/2017</Record_Updated_Date>
   </EmployeeInformation>      
   <EmployeeInformation>
      <Empl_ID>63497</Empl_ID>
      <Record_Updated_Date>8/19/2017</Record_Updated_Date>
   </EmployeeInformation>
   <EmployeeInformation>
      <Empl_ID>63496</Empl_ID>
      <Record_Updated_Date>9/19/2017</Record_Updated_Date>
   </EmployeeInformation>
   <EmployeeInformation>
      <Empl_ID>63496</Empl_ID>
      <Record_Updated_Date>10/19/2017</Record_Updated_Date>
   </EmployeeInformation>      
</FileRead>

预期结果是

<FileRead xmlns="http://TargetNamespace.com/EmpDetails">
   <EmployeeInformation>
      <Empl_ID>63496</Empl_ID>
      <Record_Updated_Date>8/19/2017</Record_Updated_Date>
   </EmployeeInformation>      
   <EmployeeInformation>
      <Empl_ID>63497</Empl_ID>
      <Record_Updated_Date>8/19/2017</Record_Updated_Date>
   </EmployeeInformation>
   <EmployeeInformation>
      <Empl_ID>63496</Empl_ID>
      <Record_Updated_Date>10/19/2017</Record_Updated_Date>
   </EmployeeInformation>      
</FileRead>

XSLT我只保留了所有重复记录的最后一个。我想只删除备用副本。这里我有4条相同的记录,我想保留#2和#4。

<xsl:stylesheet version="1.0" xmlns:ns0="http://TargetNamespace.com/EmpDetails" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:key name="employees" match="ns0:EmployeeInformation" use="ns0:Empl_ID"/>
  <xsl:template match="/*">
    <ns0:FileRead>
      <xsl:copy-of select="*[generate-id() = generate-id(key('employees', ns0:Empl_ID)[last()])]"/>
    </ns0:FileRead>
  </xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

你需要在这里分组吗?你可以这样做......

<xsl:stylesheet version="1.0" xmlns:ns0="http://TargetNamespace.com/EmpDetails" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/*">
    <xsl:copy>
      <xsl:copy-of select="*[not(ns0:Empl_ID = following-sibling::*[1]/ns0:Empl_ID)]" />
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

即选择Empl_ID与下一个Empl_ID不同的所有元素。