Ordenación múltiple
Publicado por dallas89 (1 intervención) el 27/08/2011 19:12:11
Hola,
Me gustaría hacer una ordenación de una lista de "miembros" por 3 claves: "Prioridad" , "Nombre" y "Apellidos" , pero antes deben de estar agrupados por 3 categorías: "D" (doctores) , "ND" (no doctores) y "B" (becarios) en ese orden.
He probado 1000 formas de solicionarlo, he visto un montón de manuales, tutoriales y demás y NADA que solucione esto, nada que funcione.
Es un trabajo para una asignatura y los archivos "miembros.dtd" y "miembros.xml" no se pueden cambiar, solo el "miembros.xsl"
Miembros.dtd
<code><?xml version="1.0" encoding="utf-8" ?>
<! ELEMENT miembros (miembro+)>
<! ELEMENT miembro (foto?, nombre, apellidos, cargo*, correo)>
<! ELEMENT foto (#PCDATA)>
<! ELEMENT nombre (#PCDATA)>
<! ELEMENT apellidos (#PCDATA)>
<! ELEMENT cargo (#PCDATA)>
<! ELEMENT correo (#PCDATA)>
<! ATTLIST miembro sexo (V | M) (#IMPLIED)
categoria (D | ND | B) "ND" (#IMPLIED)
prioridad CDATA "0" (#IMPLIED)>
<config>Windows XP / Safari 535.1</config></code>
miembros.xml
<code>?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="miembros.xsl" type="text/xsl"?>
<!DOCTYPE miembros SYSTEM "miembros.dtd">
<miembros>
<miembro>
<nombre>Mercedes</nombre>
<apellidos>Buiz Carreira</apellidos>
<cargo>Responsable del grupo</cargo>
<cargo>Responsable de la linea "mejora del proceso software"</cargo>
<correo>[email protected]</correo>
<sexo>"M"</sexo>
<categoria>"D"</categoria>
<prioridad>"0"</prioridad>
</miembro>
<miembro>
<nombre>Inmaculada</nombre>
<apellidos>Medina Bulo</apellidos>
<cargo>Responsable de la linea "métodos formales"</cargo>
<correo>[email protected]</correo>
<sexo>"M"</sexo>
<categoria>"D"</categoria>
<prioridad>"0"</prioridad>
</miembro>
<miembro>
<nombre>José Antonio</nombre>
<apellidos>Jiménez Millán</apellidos>
<correo>[email protected]</correo>
<sexo>"V"</sexo>
<categoria>"D"</categoria>
<prioridad>"0"</prioridad>
</miembro>
<miembro>
<nombre>Juan José</nombre>
<apellidos>DomÃnguez Jiménez</apellidos>
<correo>[email protected]</correo>
<categoria>"ND"</categoria>
<prioridad>"0"</prioridad>
</miembro>
<miembro>
<nombre>Pedro</nombre>
<apellidos>Rodriguez GarcÃa</apellidos>
<correo>[email protected]</correo>
<categoria>"ND"</categoria>
<prioridad>"0"</prioridad>
</miembro>
<miembro>
<nombre>Gregorio</nombre>
<apellidos>Cruz Rendón</apellidos>
<correo>[email protected]</correo>
<categoria>"B"</categoria>
<prioridad>"0"</prioridad>
</miembro>
<miembro>
<nombre>Ana</nombre>
<apellidos>Muñoz Rodero</apellidos>
<correo>ana.muñ[email protected]</correo>
<categoria>"B"</categoria>
<prioridad>"0"</prioridad>
</miembro>
<miembro>
<nombre>Mercedes</nombre>
<apellidos>Ruiz Carreira</apellidos>
<cargo>Responsable del grupo</cargo>
<cargo>Responsable de la linea "mejora del proceso software"</cargo>
<correo>[email protected]</correo>
<sexo>"M"</sexo>
<categoria>"D"</categoria>
<prioridad>"1"</prioridad>
</miembro>
</miembros> </code>
Miembros.xsl
<code>--> aquí va la cabecera, que tiene una URL <--
<xsl:output method="html" version="4.01" encoding="utf-8" doctype-public="-//W3C//DTD HTML 4.01//EN"/>
<xsl:template match="miembros">
<html>
<head>
<title>Generado con miembros.xsl</title>
<link href="general.css" rel="stylesheet" type="text/css"/>
<link href="miembros.css" rel="stylesheet" type="text/css" title="miembros"/>
</head>
<body>
<xsl:apply-templates>
<xsl:for-each select="categoria='D'">
<xsl:sort select="prioridad" order="descending" data-type="text"/>
<xsl:sort select="nombre" order="ascending" data-type="text"/>
<xsl:sort select="apellidos" order="ascending" data-type="text"/>
</xsl:for-each>
<xsl:for-each select="categoria='ND'">
<xsl:sort select="prioridad" order="descending" data-type="text"/>
<xsl:sort select="nombre" order="ascending" data-type="text"/>
<xsl:sort select="apellidos" order="ascending" data-type="text"/>
</xsl:for-each>
<xsl:for-each select="categoria='B'">
<xsl:sort select="prioridad" order="descending" data-type="text"/>
<xsl:sort select="nombre" order="ascending" data-type="text"/>
<xsl:sort select="apellidos" order="ascending" data-type="text"/>
</xsl:for-each>
</xsl:apply-templates>
</body>
</html>
</xsl:template>
</xsl:stylesheet> </code>
Me gustaría hacer una ordenación de una lista de "miembros" por 3 claves: "Prioridad" , "Nombre" y "Apellidos" , pero antes deben de estar agrupados por 3 categorías: "D" (doctores) , "ND" (no doctores) y "B" (becarios) en ese orden.
He probado 1000 formas de solicionarlo, he visto un montón de manuales, tutoriales y demás y NADA que solucione esto, nada que funcione.
Es un trabajo para una asignatura y los archivos "miembros.dtd" y "miembros.xml" no se pueden cambiar, solo el "miembros.xsl"
Miembros.dtd
<code><?xml version="1.0" encoding="utf-8" ?>
<! ELEMENT miembros (miembro+)>
<! ELEMENT miembro (foto?, nombre, apellidos, cargo*, correo)>
<! ELEMENT foto (#PCDATA)>
<! ELEMENT nombre (#PCDATA)>
<! ELEMENT apellidos (#PCDATA)>
<! ELEMENT cargo (#PCDATA)>
<! ELEMENT correo (#PCDATA)>
<! ATTLIST miembro sexo (V | M) (#IMPLIED)
categoria (D | ND | B) "ND" (#IMPLIED)
prioridad CDATA "0" (#IMPLIED)>
<config>Windows XP / Safari 535.1</config></code>
miembros.xml
<code>?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="miembros.xsl" type="text/xsl"?>
<!DOCTYPE miembros SYSTEM "miembros.dtd">
<miembros>
<miembro>
<nombre>Mercedes</nombre>
<apellidos>Buiz Carreira</apellidos>
<cargo>Responsable del grupo</cargo>
<cargo>Responsable de la linea "mejora del proceso software"</cargo>
<correo>[email protected]</correo>
<sexo>"M"</sexo>
<categoria>"D"</categoria>
<prioridad>"0"</prioridad>
</miembro>
<miembro>
<nombre>Inmaculada</nombre>
<apellidos>Medina Bulo</apellidos>
<cargo>Responsable de la linea "métodos formales"</cargo>
<correo>[email protected]</correo>
<sexo>"M"</sexo>
<categoria>"D"</categoria>
<prioridad>"0"</prioridad>
</miembro>
<miembro>
<nombre>José Antonio</nombre>
<apellidos>Jiménez Millán</apellidos>
<correo>[email protected]</correo>
<sexo>"V"</sexo>
<categoria>"D"</categoria>
<prioridad>"0"</prioridad>
</miembro>
<miembro>
<nombre>Juan José</nombre>
<apellidos>DomÃnguez Jiménez</apellidos>
<correo>[email protected]</correo>
<categoria>"ND"</categoria>
<prioridad>"0"</prioridad>
</miembro>
<miembro>
<nombre>Pedro</nombre>
<apellidos>Rodriguez GarcÃa</apellidos>
<correo>[email protected]</correo>
<categoria>"ND"</categoria>
<prioridad>"0"</prioridad>
</miembro>
<miembro>
<nombre>Gregorio</nombre>
<apellidos>Cruz Rendón</apellidos>
<correo>[email protected]</correo>
<categoria>"B"</categoria>
<prioridad>"0"</prioridad>
</miembro>
<miembro>
<nombre>Ana</nombre>
<apellidos>Muñoz Rodero</apellidos>
<correo>ana.muñ[email protected]</correo>
<categoria>"B"</categoria>
<prioridad>"0"</prioridad>
</miembro>
<miembro>
<nombre>Mercedes</nombre>
<apellidos>Ruiz Carreira</apellidos>
<cargo>Responsable del grupo</cargo>
<cargo>Responsable de la linea "mejora del proceso software"</cargo>
<correo>[email protected]</correo>
<sexo>"M"</sexo>
<categoria>"D"</categoria>
<prioridad>"1"</prioridad>
</miembro>
</miembros> </code>
Miembros.xsl
<code>--> aquí va la cabecera, que tiene una URL <--
<xsl:output method="html" version="4.01" encoding="utf-8" doctype-public="-//W3C//DTD HTML 4.01//EN"/>
<xsl:template match="miembros">
<html>
<head>
<title>Generado con miembros.xsl</title>
<link href="general.css" rel="stylesheet" type="text/css"/>
<link href="miembros.css" rel="stylesheet" type="text/css" title="miembros"/>
</head>
<body>
<xsl:apply-templates>
<xsl:for-each select="categoria='D'">
<xsl:sort select="prioridad" order="descending" data-type="text"/>
<xsl:sort select="nombre" order="ascending" data-type="text"/>
<xsl:sort select="apellidos" order="ascending" data-type="text"/>
</xsl:for-each>
<xsl:for-each select="categoria='ND'">
<xsl:sort select="prioridad" order="descending" data-type="text"/>
<xsl:sort select="nombre" order="ascending" data-type="text"/>
<xsl:sort select="apellidos" order="ascending" data-type="text"/>
</xsl:for-each>
<xsl:for-each select="categoria='B'">
<xsl:sort select="prioridad" order="descending" data-type="text"/>
<xsl:sort select="nombre" order="ascending" data-type="text"/>
<xsl:sort select="apellidos" order="ascending" data-type="text"/>
</xsl:for-each>
</xsl:apply-templates>
</body>
</html>
</xsl:template>
</xsl:stylesheet> </code>
Valora esta pregunta


0