我认为这个简单的例子可能会更清楚地提出这个问题。
我有一个包含多个产品的输入文件。有不同类型的产品(对于这个例子来说,有 2 个产品 ID 的 2 种类型就足够了),但输入会有更多。
我只想输出在 for each Product 循环中遇到的每种类型的第一个产品的信息。(我正在输出价格最低的产品的信息,所以第一个将是最低价格,因为我首先按价格排序。)
所以我想读取每个产品,但如果我还没有输出具有相同 ID 的产品,则只输出产品的信息。我有一个 IDArray 的变量,我想检查 for each product 循环中的每个产品是否有一个已经在该 IDArray 中的 ID - 如果没有,请继续,如果它已经在数组中,则跳过所有内容并循环到下一个。
我不知道如何让子元素成为 IDArray 中的一个节点,其中每个 CurrentID 的值。它不断将该值作为节点添加到 CurrentID,该节点仅在每个产品的范围内,而不是整个产品组。我知道下面的代码不起作用,但它说明了这个想法并给了我一个开始的地方:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes" cdata-section-elements="prod_name adv_notes"/>
<xsl:template match="/">
<List>
<xsl:for-each select="ProductGroup">
<xsl:sort select="Product/Rate"/>
<xsl:variable name="IDarray">
<xsl:for-each select="Product">
<xsl:variable name="CurrentID">
<xsl:call-template name="processID">
<xsl:with-param name="ProductCode" select="ProductCode" />
</xsl:call-template>
</xsl:variable>
<xsl:if test="not(contains($IDarray, $CurrentID))">
<child elem="{@elem}">
<xsl:select value-of="$CurrentID" />
</child>
<Product>
<xsl:attribute name="ID">
<xsl:select value-of="$CurrentID" />
</xsl:attribute>
<prod_name>
<xsl:value-of select="ProductName"/>
</prod_name>
<rate>
<xsl:value-of select="Rate"/>
</rate>
</Product>
</xsl:if>
</xsl:for-each>
</xsl:variable>
</xsl:for-each>
</List>
</xsl:template>
<xsl:template name="processID">
<xsl:param name="ProductCode"/>
<xsl:choose>
<xsl:when test="starts-with($ProductCode, '515')">5</xsl:when>
<xsl:when test="starts-with($ProductCode, '205')">2</xsl:when>
</xsl:choose>
</xsl:template>
提前非常感谢,我知道这里有一些很棒的程序员可以提供帮助!:) -冬青
输入看起来像这样:
<ProductGroup>
<Product>
<ProductCode>
5155
</ProductCode>
<ProductName>
House
</ProductName>
<Rate>
3.99
</Rate>
</Product>
<Product>
<ProductCode>
5158
</ProductCode>
<ProductName>
House
</ProductName>
<Rate>
4.99
</Rate>
</Product>
</ProductGroup>
<ProductGroup>
<Product>
<ProductCode>
2058
</ProductCode>
<ProductName>
House
</ProductName>
<Rate>
2.99
</Rate>
</Product>
<Product>
<ProductCode>
2055
</ProductCode>
<ProductName>
House
</ProductName>
<Rate>
7.99
</Rate>
</Product>
</ProductGroup>
仅对于那个简单的输入文件,输出将是这样的:
在这里实现 Muenchian 分组很困难,因为我的实际数据集很大。我很容易问一个问题。如果我能让那个数组方法正常工作,那么我庞大的项目的其余部分就可以工作了。