2012-10-24 4 views
1

XML d'entrée comme ci-dessous:xml tri travail fn non

<Global> 
    <ProductFood> 
     <foodName>Burger</foodName> 
     <foodName>Snack</foodName> 
    </ProductFood> 
    <ProductToy>  
     <Product ProductID="1"> 
     <productName>Doll</productName> 
     <Color>Green</Color> 
     </Product> 
     <Product ProductID="2"> 
     <productName>Ball</productName> 
     <Color>White</Color> 
     </Product>  
    </ProductToy> 
</Global> 

code XSLT que j'ai est ci-dessous:

<xsl:template match="//Products"> 
    <html> 
     <body> 
      <Products> 
       <xsl:apply-templates select="ProductToy" > 
       <xsl:sort select="@name"/> 
       <xsl:apply-templates/> 
      </Products> 
     </body> 
    </html> 
</xsl:template> 

<xsl:template match="Product"> 
    <xsl:element name="product"> 
     <xsl:attribute name="name" select="ProductName/text()" /> 
     <xsl:element name="productID"> 
      <xsl:value-of select="@ProductID" /> 
     </xsl:element> 
    </xsl:element> 
</xsl:template> 

je voulais la sortie pour retourner le nom d'attribut produit par ordre croissant .mais mon tri ne fonctionne pas car il montre d'abord la balle du produit, puis seulement la poupée. s'il vous plaît aviser comment le faire fonctionner.

+0

Vous stocker les éléments de ProductToy mais il n'y a qu'un seul élément ProductToy; le tri d'un ensemble avec un seul élément n'est pas une opération très utile. De plus, vous les triez en fonction de la valeur de l'attribut name, mais ni votre élément ProductToy ni aucune autre chose n'a un attribut name. –

Répondre

0

Utilisation:

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

    <xsl:template match="/Global"> 
    <html> 
     <body> 
     <Products> 
      <xsl:apply-templates select="//Product"> 
      <xsl:sort select="productName"/> 
      </xsl:apply-templates> 
     </Products> 
     </body> 
    </html> 
    </xsl:template> 

    <xsl:template match="Product"> 
    <product name="{productName}"> 
     <productID> 
     <xsl:value-of select="@ProductID"/> 
     </productID> 
    </product> 
    </xsl:template> 
</xsl:stylesheet> 

sortie:

<html> 
    <body> 
    <Products> 
     <product name="Ball"> 
     <productID>2</productID> 
     </product> 
     <product name="Doll"> 
     <productID>1</productID> 
     </product> 
    </Products> 
    </body> 
</html>