【发布时间】:2017-07-12 19:59:06
【问题描述】:
场景是这样的: 我有一家商店,销售来自两家生产商 CompanyA 和 CompanyB 的家具,还从一个进口商 CompanyC 进口家具。
我的文件是这样的
<shop>
<product>
<name>Chair</name>
<colour>Green</colour>
<producer>CompanyA</producer>
</product>
<product>
<name>Chair</name>
<colour>Green</colour>
<producer>CompanyB</producer>
</product>
<product>
<name>Chair</name>
<colour>Blue</colour>
<producer>CompanyA</producer>
</product>
<product>
<name>Chair</name>
<colour>Blue</colour>
<importer>CompanyC</importer>
</product>
<product>
<name>Table</name>
<colour>Green</colour>
<importer>CompanyC</importer>
</product>
<product>
<name>Table</name>
<colour>Green</colour>
<producer>CompanyA</producer>
</product>
<product>
<name>Table</name>
<colour>Blue</colour>
<producer>CompanyB</producer>
</product>
<product>
<name>Table</name>
<colour>Blue</colour>
<importer>CompanyC</importer>
</product>
</shop>
我想减少库存,所以我需要 CompanyA 和 CompanyC 的类似产品清单。我不想列出来自 CompanyA 和 CompanyB 的类似产品,也不想列出来自 CompanyB 和 CompanyC 的类似产品。 期望的输出是这个
<shop>
<product>
<name>Chair</name>
<colour>Blue</colour>
<producer>CompanyA</producer>
</product>
<product>
<name>Chair</name>
<colour>Blue</colour>
<importer>CompanyC</importer>
</product>
<product>
<name>Table</name>
<colour>Green</colour>
<importer>CompanyC</importer>
</product>
<product>
<name>Table</name>
<colour>Green</colour>
<producer>CompanyA</producer>
</product>
</shop>
我已经复制粘贴了一个旧样式表,它为我提供了所有类似产品的列表 - 所以我的问题是:我如何过滤列表,以便它只给出一个来自 CompanyA 和另一个来自 CompanyC 的配对?
我只能使用没有扩展的 XSL 1.0
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no"/>
<xsl:key name="duplo" match="product" use="concat(name,colour)"/>
<xsl:template match="/">
<shop>
<xsl:for-each select="//product[generate-id(.)=generate-id(key('duplo', concat(name,colour))[2])]">
<xsl:for-each select="key('duplo', concat(name,colour))">
<product>
<name><xsl:value-of select="name"/></name>
<colour><xsl:value-of select="colour"/></colour>
<producer><xsl:value-of select="producer"/></producer>
<importer><xsl:value-of select="importer"/></importer>
</product>
</xsl:for-each>
</xsl:for-each>
</shop>
</xsl:template>
</xsl:stylesheet>
【问题讨论】:
标签: xml xslt muenchian-grouping