如何使用xslt 1.0获取最小值的不同?

时间:2012-02-10 16:40:57

标签: xslt

下面是我的名为product.xml

的xml文件
<products>
    <product>
        <name>Pen</name>
        <price>8</price>
    </product> 
    <product>
        <name>Bag</name>
        <price>10</price>
    </product>
    <product>
        <name>Pen</name>
        <price>10</price>
    </product>
    <product>
        <name>Pen</name>
        <price>5</price>
    </product>
    <product>
        <name>Bag</name>
        <price>15</price>
    </product>
    <product>
        <name>Pencil</name>
        <price>5</price>
    </product>
    </products>

我需要以最低价格采用不同的产品...使用xslt 1.0

所需的输出是

<products>
<product>
    <name>Bag</name>
    <price>10</price>
</product>
<product>
    <name>Pen</name>
    <price>5</price>
</product>
<product>
    <name>Pencil</name>
    <price>5</price>
</product>
<products>

希望得到你的帮助-------------------------------------------- -------------------- ------------------------------ --------- - ---------------------------------------- --------------------------- - - --------------------- ---------

1 个答案:

答案 0 :(得分:0)

此转化

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:key name="kProdByName" match="product"
           use="name"/>

 <xsl:template match=
  "product
    [generate-id()
    =
     generate-id(key('kProdByName', name)[1])
     ]
  ">
   <product>
    <xsl:for-each select="key('kProdByName', name)">
      <xsl:sort select="price" data-type="number"/>

      <xsl:if test="position() = 1">
        <xsl:copy-of select="node()"/>
      </xsl:if>
    </xsl:for-each>
   </product>
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

应用于提供的XML文档

<products>
    <product>
        <name>Pen</name>
        <price>8</price>
    </product>
    <product>
        <name>Bag</name>
        <price>10</price>
    </product>
    <product>
        <name>Pen</name>
        <price>10</price>
    </product>
    <product>
        <name>Pen</name>
        <price>5</price>
    </product>
    <product>
        <name>Bag</name>
        <price>15</price>
    </product>
    <product>
        <name>Pencil</name>
        <price>5</price>
    </product>
</products>

生成想要的正确结果

<product>
  <name>Pen</name>
  <price>5</price>
</product>
<product>
  <name>Bag</name>
  <price>10</price>
</product>
<product>
  <name>Pencil</name>
  <price>5</price>
</product>

<强>解释

  1. product name的Muenchian分组。

  2. 在每个小组中,通过从已排序的节点列表中取出第一个product来查找price最小product