简体   繁体   English

如何使用xslt1.0取最小值?

[英]how to take distinct with minimum value using xslt1.0?

Below is my xml 下面是我的xml

<products>
    <product>
        <supplier>1</supplier>
        <item>
            <color>Red</color>
            <name>Pen</name>
            <price>10</price>
        </item>
        <item>
            <color>Green</color>
            <name>Pen</name>
            <price>15</price>
        </item>
        <item>
            <color>Red</color>
            <name>Pen</name>
            <price>5</price>
        </item>
    </product>
    <product>
        <supplier>1</supplier>
        <item>
            <color>White</color>
            <name>Pen</name>
            <price>10</price>
        </item>
        <item>
            <color>Green</color>
            <name>Pen</name>
            <price>18</price>
        </item>
        <item>
            <color>Red</color>
            <name>Pen</name>
            <price>15</price>
        </item>
    </product>
    <product>
        <supplier>2</supplier>
        <item>
            <color>White</color>
            <name>Pen</name>
            <price>5</price>
        </item>
        <item>
            <color>Green</color>
            <name>Pen</name>
            <price>18</price>
        </item>
        <item>
            <color>White</color>
            <name>Pen</name>
            <price>15</price>
        </item>
    </product>
</products>

I need to take distinct product with there minimum price ...using xslt 1.0 我需要以最低的价格购买独特的产品...使用xslt 1.0

required output is 所需的输出是

<products>
    <product>
        <supplier>1</supplier>
        <item>
            <color>Green</color>
            <name>Pen</name>
            <price>15</price>
        </item>
        <item>
            <color>Red</color>
            <name>Pen</name>
            <price>5</price>
        </item>
        <item>
            <color>White</color>
            <name>Pen</name>
            <price>10</price>
        </item>
    </product>
    <product>
        <supplier>2</supplier>
        <item>
            <color>White</color>
            <name>Pen</name>
            <price>5</price>
        </item>
        <item>
            <color>Green</color>
            <name>Pen</name>
            <price>18</price>
        </item>
    </product>
</products>

hoping your help ---------------------------------------------------------------- --------------------------------------- - ------------------------------------------------------------------- - - ------------------------------ 希望得到您的帮助----------------------------------------------- ----------------- --------------------------------- ------------------------------------------------------ -------------------------------------------------- ------

Use: 采用:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:key name="s" match="product" use="supplier"/>
  <xsl:key name="k" match="item" use="concat(../supplier, ',', name, ',', color)"/>

  <xsl:template match="/products">
    <xsl:copy>
      <xsl:apply-templates select="product[generate-id() 
                           = generate-id(key('s', supplier))]"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="product">
    <xsl:copy>
      <xsl:copy-of select="supplier"/>
      <xsl:apply-templates select="../product/item[generate-id()
                           = generate-id(key('k', concat(current()/supplier, ',', name, ',', color)))]"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="item">
    <xsl:for-each select="key('k', concat(../supplier, ',', name, ',', color))">
      <xsl:sort select="price" data-type="number"/>
      <xsl:if test="position() = 1">
        <xsl:copy-of select="."/>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM