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:
- Mostrar una lista numerada los títulos de los libros con algún autor nacido después de 1900.
- Mostrar una lista ordenada por orden alfabética inverso de los autores.
- Mostrar el nombre de los autores nacidos despues del año 1700.
Solución
- 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>
- 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>
- 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 > 1700">
<li><xsl:value-of select="."/></li>
</xsl:if>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>