鑑於這種XML輸入
<?xml version="1.0" encoding="UTF-8"?>
<root>
<price_record>
<price>222.5</price>
<price_date>20060724</price_date>
<price_supplier_name>ABC</price_supplier_name>
<seq_num>1</seq_num>
</price_record>
<price_record>
<price>382.5</price>
<price_date>20080725</price_date>
<price_supplier_name>ABC</price_supplier_name>
<seq_num>2</seq_num>
</price_record>
<price_record>
<price>88.58</price>
<price_date>20060927</price_date>
<price_supplier_name>YZ</price_supplier_name>
<seq_num>3</seq_num>
</price_record>
<price_record>
<price>78</price>
<price_date>20060928</price_date><!-- modified -->
<price_supplier_name>YZ</price_supplier_name>
<seq_num>3</seq_num>
</price_record>
</root>
和這個樣式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:variable name="Suppliers">
<xsl:for-each select="root/price_record/price_supplier_name">
<xsl:value-of select="."/>
<xsl:text>,</xsl:text>
</xsl:for-each>
</xsl:variable>
<xsl:template match="root">
<xsl:copy>
<xsl:for-each select="price_record">
<xsl:choose>
<xsl:when test="position()!=last()">
<xsl:choose>
<xsl:when test="following::price_record[price_date > current()/price_date]/price_supplier_name = current()/price_supplier_name or preceding::price_record[price_date > current()/price_date]/price_supplier_name = current()/price_supplier_name"/>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="contains($Suppliers, current()/price_supplier_name) and preceding::price_record[price_date > current()/price_date]/price_supplier_name = current()/price_supplier_name"/>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
輸出
<?xml version="1.0" encoding="utf-8"?>
<root>
<price_record>
<price>382.5</price>
<price_date>20080725</price_date>
<price_supplier_name>ABC</price_supplier_name>
<seq_num>2</seq_num>
</price_record>
<price_record>
<price>78</price>
<price_date>20060928</price_date>
<!-- modified -->
<price_supplier_name>YZ</price_supplier_name>
<seq_num>3</seq_num>
</price_record>
</root>
你需要了解有關Muenchian分組。從這裏開始:http://www.jenitennison.com/xslt/grouping/muenchian.html –