Ejercicio 510
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>
</inventario>
Diseña el fichero XSLT que permita crear un documento XML de salida cuyo resultado sea el de filtrar, del XML anterior, los productos que sean del edificio B.
Solución
Debemos añadir una cabecera al documento XML (suponiendo que el nombre del fichero XSLT es 510.xsl
):
<?xml-stylesheet type="text/xsl" href="510.xsl"?>
Hoja XSL:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<inventario>
<xsl:for-each select="inventario/producto">
<xsl:if test="lugar/@edificio='B'">
<producto>
<peso>
<xsl:value-of select="peso"/>
</peso>
<nombre>
<xsl:value-of select="nombre"/>
</nombre>
<lugar>
<xsl:attribute name="edificio">
<xsl:value-of select="lugar/@edificio"/>
</xsl:attribute>
<aula>
<xsl:value-of select="lugar/aula"/>
</aula>
</lugar>
</producto>
</xsl:if>
</xsl:for-each>
</inventario>
</xsl:template>
</xsl:stylesheet>
Hoja XSL alternativa:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<inventario>
<xsl:for-each select="/inventario/producto[lugar/@edificio='B']">
<xsl:copy-of select="."/>
</xsl:for-each>
</inventario>
</xsl:template>
</xsl:stylesheet>
Documento XML de salida:
<?xml version="1.0" encoding="utf-8"?>
<inventario>
<producto>
<peso>10</peso>
<nombre>Ordenador</nombre>
<lugar edificio="B">
<aula>10</aula>
</lugar>
</producto>
</inventario>