Ejercicio 511
Consideremos el siguiente documento XML:
<?xml version="1.0" encoding="UTF-8"?>
<inventario>
<producto codigo="P1">
<peso unidad="kg">10</peso>
<nombre>Ordenador</nombre>
<lugar edificio="B">
<aula>10</aula>
</lugar>
</producto>
<producto codigo="P2">
<peso unidad="g">500</peso>
<nombre>Switch</nombre>
<lugar edificio="A">
<aula>6</aula>
</lugar>
</producto>
<producto codigo="P3">
<peso unidad="kg">15</peso>
<nombre>Mesa</nombre>
<lugar edificio="B">
<aula>6</aula>
</lugar>
</producto>
</inventario>
Diseña el fichero XSLT que permita obtener la siguiente salida en HTML:
Solución
Debemos añadir una cabecera al documento XML (suponiendo que el nombre del fichero XSLT es 511.xsl
):
<?xml-stylesheet type="text/xsl" href="511.xsl"?>
Hoja XSL:
<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>Datos por edificio</title>
</head>
<body>
<h1>Resultados</h1>
<table border='1'>
<xsl:for-each select="inventario/producto">
<tr>
<td>
<xsl:value-of select="nombre"/>
</td>
<td>
<xsl:if test="peso[@unidad='kg']">
<xsl:value-of select="peso"/>
</xsl:if>
<xsl:if test="peso[@unidad='g']">
<xsl:value-of select="peso * 0.001"/>
</xsl:if>
</td>
<td>
<xsl:value-of select="lugar/@edificio"/>
<xsl:value-of select="lugar/aula"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Documento HTML de salida:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Datos por edificio</title>
</head>
<body>
<h1>Resultados</h1>
<table border="1">
<tr>
<td>Ordenador</td>
<td>10</td>
<td>B10</td>
</tr>
<tr>
<td>Switch</td>
<td>0.5</td>
<td>A6</td>
</tr>
<tr>
<td>Mesa</td>
<td>15</td>
<td>B6</td>
</tr>
</table>
</body>
</html>