XSLT 1.0 删除备用重复记录
XSLT 1.0 remove alternate duplicate records
我正在尝试使用 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>
这里需要分组吗?你可以这样做...
<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>
即 Select Empl_ID 与下一个元素不同的所有元素。
我正在尝试使用 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>
这里需要分组吗?你可以这样做...
<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>
即 Select Empl_ID 与下一个元素不同的所有元素。