2012-03-22 12 views
7

Tengo un documento XSL bastante grande para una tarea que hace varias cosas. Está casi completo, pero me perdí el requisito de que tenga que ser ordenado y no puedo hacer que funcione. Aquí hay un SSCCE de lo que está sucediendo.xsl: ordenar con apply-templates sin ordenar

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<!-- Root Document --> 
<xsl:template match="/"> 

    <html> 
    <body> 

     <xsl:apply-templates select="staff"> 
      <xsl:sort select="member/last_name" /> 
     </xsl:apply-templates> 

    </body> 
    </html> 

</xsl:template> 

<xsl:template match="member"> 
    <xsl:value-of select="first_name" />&#160;<xsl:value-of select="last_name" /> <br/> 
</xsl:template> 

</xsl:stylesheet> 

archivo XML se parece a esto

<?xml version="1.0" encoding="UTF-8"?> 

<?xml-stylesheet type="text/xsl" href="sort.xsl"?> 

<staff> 
    <member> 
     <first_name>Joe</first_name> 
     <last_name>Blogs</last_name> 
    </member> 

    <member> 
     <first_name>John</first_name> 
     <last_name>Smith</last_name> 
    </member> 

    <member> 
     <first_name>Steven</first_name> 
     <last_name>Adams</last_name> 
    </member> 

</staff> 

que estaba esperando los miembros del personal para ser listados por el apellido, pero que no están recibiendo lo solucionaron. Tenga en cuenta que no tengo mucha experiencia en XSLT.

Respuesta

20
<xsl:apply-templates select="staff"> 
     <xsl:sort select="member/last_name" /> 
    </xsl:apply-templates> 

selecciona los elementos de personal y los ordena, pero solo hay un elemento de personal, por lo que no es necesario.

Cambiar para

<xsl:apply-templates select="staff/member"> 
     <xsl:sort select="last_name" /> 
    </xsl:apply-templates> 

entonces que selecciona todos los elementos de miembros y los ordena.

3

Lo que falta es una plantilla de personal de juego o cambiar la plantilla correspondiente al miembro, como en éste:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<!-- Root Document --> 
<xsl:template match="/"> 

    <html> 
    <body> 

     <xsl:apply-templates select="staff/member"> 
      <xsl:sort select="last_name" /> 
     </xsl:apply-templates> 

    </body> 
    </html> 

</xsl:template> 

<xsl:template match="member"> 
    <xsl:value-of select="first_name" />&#160;<xsl:value-of select="last_name" /> <br/> 
</xsl:template> 

</xsl:stylesheet>