Saltar al contenido principal

Ejercicio 513

Consideremos el siguiente documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<catalogo>
<libro isbn="i1">
<titulo>Don Quijote</titulo>
<autores>
<autor nacimiento="1547">Cervantes</autor>
</autores>
</libro>
<libro isbn="i2">
<titulo>Antologia</titulo>
<autores>
<autor nacimiento="1898">Lorca</autor>
<autor nacimiento="1910">Miguel Hernandez</autor>
</autores>
</libro>
</catalogo>

Diseña un fichero XSLT (para cada apartado) que permita obtener la siguiente salida en HTML:

  1. Mostrar una lista numerada los títulos de los libros con algún autor nacido después de 1900.
  2. Mostrar una lista ordenada por orden alfabética inverso de los autores.
  3. Mostrar el nombre de los autores nacidos despues del año 1700.
Solución
  1. Mostrar una lista numerada los títulos de los libros con algún autor nacido después de 1900.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:output method="html" indent="yes"/>

<xsl:template match="/">
<html>
<head>
<title>Resultado</title>
</head>
<body>
<ol>
<xsl:for-each select="//libro">
<xsl:if test="autores/autor/@nacimiento > 1900">
<li><xsl:value-of select="titulo"/></li>
</xsl:if>
</xsl:for-each>
</ol>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
  1. Mostrar una lista ordenada por orden alfabética inverso de los autores.
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<title>Resultado</title>
</head>
<body>
<ol>
<xsl:for-each select="catalogo/libro/autores/autor">
<xsl:sort select="." order="descending"/>
<li>
<xsl:value-of select="."/>
</li>
</xsl:for-each>
</ol>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
  1. Mostrar el nombre de los autores nacidos despues del año 1700.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:output method="html" indent="yes"/>

<xsl:template match="/">
<html>
<head>
<title>Resultado</title>
</head>
<body>
<ul>
<xsl:for-each select="//libro/autores/autor">
<xsl:if test="@nacimiento &gt; 1700">
<li><xsl:value-of select="."/></li>
</xsl:if>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>