Corrigé travaux pratiques XSLT 2

Huitième partie

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
 
    <xsl:output method="html"/>

    <xsl:template match="/">
        <HTML>
            <HEAD>
                <TITLE>Electric Juicers</TITLE>
            </HEAD>
            <BODY>
                <xsl:for-each select="/juicers/juicer">
                    <xsl:variable name="juicerName" select="name"/>
                    <xsl:variable name="isElectric" select="@electric"/>
                    <xsl:if test="$isElectric='true'">
                        This juicer is electric: <xsl:value-of select="$juicerName"/><br/>
                    </xsl:if>
                </xsl:for-each>
            </BODY>
        </HTML>
    </xsl:template>
</xsl:stylesheet>

Neuvième partie

On eut faire mieux mais voici la version 'simple':

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
 
    <xsl:output method="html"/>

    <xsl:template match="/">
        <HTML>
            <HEAD>
                <TITLE>Determine if the Juicer XML document contains certain juicers</TITLE>
            </HEAD>
            <BODY>
                <xsl:variable name="juicerList">
                    <xsl:for-each select="/juicers/juicer[position() < last()]">
                        <xsl:value-of select="name"/>
                        <xsl:text>~</xsl:text>
                    </xsl:for-each>
                    <xsl:value-of select="/juicers/juicer[last()]/name"/>
                </xsl:variable>
                Juicer List: <xsl:value-of select="$juicerList"/><br/>
                <xsl:if test="contains($juicerList, 'Champion')">
                    <xsl:text>- contains Champion</xsl:text><br/>
                </xsl:if>
                <xsl:if test="not(contains($juicerList, 'Champion'))">
                    <xsl:text>- does not contain Champion</xsl:text><br/>
                </xsl:if>
                <xsl:if test="contains($juicerList, 'Omega')">
                    <xsl:text>- contains Omega</xsl:text><br/>
                </xsl:if>
                <xsl:if test="not(contains($juicerList, 'Omega'))">
                    <xsl:text>- does not contain Omega</xsl:text><br/>
                </xsl:if>
                <xsl:if test="contains($juicerList, 'Ultrex')">
                    <xsl:text>- contains Ultrex</xsl:text><br/>
                </xsl:if>
                <xsl:if test="not(contains($juicerList, 'Ultrex'))">
                    <xsl:text>- does not contain Ultrex</xsl:text><br/>
                </xsl:if>
            </BODY>
        </HTML>
    </xsl:template>
</xsl:stylesheet>

Dixième partie

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
 
    <xsl:output method="html"/>

    <xsl:variable name="lcase" select="'abcdefghijklmnopqrstuvwxyz'"/>
    <xsl:variable name="ucase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>

    <xsl:template match="/" >
        <HTML>
            <HEAD>
                <TITLE>Airports</TITLE>
            </HEAD>
            <BODY>
                <xsl:for-each select="/airports/location">
                    <xsl:choose>
                        <xsl:when test="starts-with(.,'ICAO:')">
                            <xsl:text>ICAO = </xsl:text>
                 <xsl:variable name="icao" select="substring-after(., 'ICAO:')"/>
                            <xsl:value-of select="translate($icao, $lcase, $ucase)"/>
                            <BR/>
                        </xsl:when>
                        <xsl:when test="starts-with(.,'LatLon:')">
                            <xsl:text>LatLon = </xsl:text>
                            <xsl:variable name="latlon" select="substring-after(., 'LatLon:')"/>
                            <xsl:value-of select="translate($latlon, $lcase, $ucase)"/>
                            <BR/>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:text>Data Error!  Data must be formatted as: ICAO: code, or LatLon: value</xsl:text>
                            <BR/>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:for-each>
            </BODY>
        </HTML>
    </xsl:template>
</xsl:stylesheet>

Onzième partie

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
 
    <xsl:output method="html"/>

    <xsl:template match="/">
        <HTML>
            <HEAD>
                <TITLE>Juicers and Their Cost</TITLE>
            </HEAD>
            <BODY>
    <xsl:variable name="priceAdjuster" select="document('priceAdjuster.xml')"/>
                <xsl:if test="$priceAdjuster/priceAdjustment/adjustment/@action='no change'">
                    <TABLE BORDER="1" WIDTH="50%">
                        <TR>
                            <TH>Juicer</TH><TH>Cost</TH>
                        </TR>
                        <xsl:for-each select="/juicers/juicer">
                            <TR>
                                <TD><xsl:value-of select="name"/></TD>
                                <TD><xsl:value-of select="format-number(cost[@currency='USD'], '$#.00')"/></TD>
                            </TR>
                        </xsl:for-each>
                    </TABLE>
                </xsl:if>
        <xsl:if test="$priceAdjuster/priceAdjustment/adjustment/@action='increase'">
                    <xsl:variable name="sizeIncrease" select="$priceAdjuster/priceAdjustment/adjustment/sizeIncrease"/>
                    <TABLE BORDER="1" WIDTH="50%">
                        <TR>
                            <TH>Juicer</TH><TH>Cost</TH>
                        </TR>
                        <xsl:for-each select="/juicers/juicer">
                            <TR>
                                <TD><xsl:value-of select="name"/></TD>
                                <xsl:variable name="newCost" select="((cost[@currency='USD'] * ($sizeIncrease div 100)) + cost[@currency='USD'])"/>
                                <TD><xsl:value-of select="format-number($newCost, '$#.00')"/></TD>
                            </TR>
                        </xsl:for-each>
                    </TABLE>
                </xsl:if>
            </BODY>
        </HTML>
    </xsl:template>

</xsl:stylesheet>

Douzième partie

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
 
    <xsl:output method="html"/>

    <xsl:template match="/">
        <HTML>
            <HEAD>
                <TITLE>Juicers and Their Cost</TITLE>
            </HEAD>
            <BODY>
                <xsl:variable name="priceAdjuster" select="document('priceAdjuster2.xml')"/>
                <xsl:if test="$priceAdjuster/priceAdjustment/adjustment/@action='no change'">
                    <xsl:call-template name="createJuicerCostTable"/>
                </xsl:if>
                <xsl:if test="$priceAdjuster/priceAdjustment/adjustment/@action='increase'">
                    <xsl:variable name="sizeIncrease" select="$priceAdjuster/priceAdjustment/adjustment/sizeIncrease"/>
                    <xsl:call-template name="createJuicerCostTable">
                        <xsl:with-param name="sizeIncrease" select="$sizeIncrease"/>
                    </xsl:call-template>
                </xsl:if>
            </BODY>
        </HTML>
    </xsl:template>

    <xsl:template name="createJuicerCostTable">
        <xsl:param name="sizeIncrease" select="0"/>
        <TABLE BORDER="1" WIDTH="50%">
            <TR>
                <TH>Juicer</TH><TH>Cost</TH>
            </TR>
            <xsl:for-each select="/juicers/juicer">
                <TR>
                    <TD><xsl:value-of select="name"/></TD>
                    <xsl:variable name="newCost" select="((cost[@currency='USD'] * ($sizeIncrease div 100)) + cost[@currency='USD'])"/>
                    <TD><xsl:value-of select="format-number($newCost, '$#.00')"/></TD>
                </TR>
            </xsl:for-each>
        </TABLE>
    </xsl:template>

</xsl:stylesheet>

Treizième partie

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
 
    <xsl:variable name="lcase" select="'abcdefghijklmnopqrstuvwxyz'"/>
    <xsl:variable name="ucase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>

    <xsl:output method="xml"/>

    <xsl:template match="*">
        <xsl:element name="{translate(name(.), $lcase, $ucase)}">
            <xsl:for-each select="@*">
                <xsl:attribute name="{translate(name(.), $lcase, $ucase)}">
                    <xsl:value-of select="."/>
                </xsl:attribute>
            </xsl:for-each>
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

Quatorzième partie

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

    <xsl:output method="xml"/>

    <xsl:template match="company_data">
        <xsl:element name="{name(.)}">
            <xsl:for-each select="@*">
                <xsl:attribute name="{name(.)}">
                    <xsl:value-of select="."/>
                </xsl:attribute>
            </xsl:for-each>
            <xsl:apply-templates select="*"/>
        <xsl:text>
</xsl:text>
        </xsl:element>
    </xsl:template>

    <xsl:template match="data">
        <xsl:text>
    </xsl:text>
        <xsl:element name="{name(.)}">
            <xsl:for-each select="@*">
                <xsl:attribute name="{name(.)}">
                    <xsl:value-of select="."/>
                </xsl:attribute>
            </xsl:for-each>
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="data[@classification='top-secret']">
        <!-- Delete the top-secret data -->
    </xsl:template>
</xsl:stylesheet>

Quinzième partie

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
 
    <xsl:output method="xml"/>

    <xsl:template match="juicers">
        <xsl:element name="JuicerCatalogue">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="juicer">
        <xsl:element name="Juicer">
            <xsl:attribute name="id">
                <xsl:value-of select="@id"/>
            </xsl:attribute>
            <xsl:element name="Type">               
                <xsl:value-of select="@type"/>
            </xsl:element>
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="name">
        <xsl:element name="Name">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="image">
        <!-- Drop it -->
    </xsl:template>

    <xsl:template match="description">
        <xsl:element name="Description">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="warranty">
        <!-- Drop it -->
    </xsl:template>

    <xsl:template match="weight">
        <!-- Drop it -->
    </xsl:template>

    <xsl:template match="cost">
        <!-- Drop it -->
    </xsl:template>

    <xsl:template match="retailer">
        <!-- Drop it -->
    </xsl:template>

</xsl:stylesheet>

Seixième partie

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

    <xsl:output method="xml"/>

    <xsl:template match="/">
        <xsl:apply-templates select="PLAY/PERSONAE"/>
    </xsl:template>

    <xsl:template match="*">
        <xsl:element name="{name(.)}">
            <xsl:for-each select="@*">
                <xsl:attribute name="{name(.)}">
                    <xsl:value-of select="."/>
                </xsl:attribute>
            </xsl:for-each>
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

Dix-septième partie

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
 
    <xsl:output method="xml"/>

    <xsl:template match="/">
        <xsl:apply-templates/>
    </xsl:template>

    <xsl:template match="juicers">
        <xsl:element name="juicers">
            <xsl:apply-templates/>
            <xsl:element name="footnote">
               <xsl:apply-templates mode="footnote"/>
            </xsl:element>
        </xsl:element>
    </xsl:template>

    <xsl:template match="juicer">
        <xsl:element name="juicer">
            <xsl:attribute name="id">
                <xsl:value-of select="@id"/>
            </xsl:attribute>
            <xsl:apply-templates select="name"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="juicer" mode="footnote">
        <xsl:element name="item">
           <xsl:value-of select="name"/>
           <xsl:text>/</xsl:text>
           <xsl:value-of select="cost[@currency='USD']"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="name">
        <xsl:element name="Name">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="description">
        <xsl:element name="Description">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>