2012-02-10 6 views
1

ci-dessous est mon fichier xml appelé product.xmlcomment prendre distinct avec la valeur minimale en utilisant xslt1.0?

<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> 

Je dois prendre avec il produit distinct prix minimum ... en utilisant xslt 1.0

sortie requise est

<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> 

espérant votre Aidez-moi ------------------------------------------------- --------------- ----------------------------------- ---- - --------------------------------------------- ---------------------- - - -------------------------- ----

Répondre

0

Cette transformation:

<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> 

lorsqu'il est appliqué sur le document XML fourni:

<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> 

produit le résultat souhaité, correct:

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

Explication:

  1. groupement Muenchian de product par name.

  2. Dans chaque groupe de trouver le minimum product avec price en prenant la première product parmi les groupes triés noeud-liste.

Questions connexes