<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    <!-- The 'match' attribute is used to associate a template with an XML element, say '/' as the root: -->
    <xsl:template match="/PLM">
        <PLM>
            <xsl:apply-templates select="Article"/>
            <xsl:text disable-output-escaping="yes">&lt;!-- ... --&gt;</xsl:text> 
            <xsl:apply-templates select="Lien_de_nomenclature"/>
            <xsl:text disable-output-escaping="yes">&lt;!-- ... --&gt;</xsl:text> 
        </PLM>
    </xsl:template>
    <xsl:template match="Article">
        <!-- L'élément 'Article' reste en tant que tel : -->
        <xsl:element name="{local-name()}">
            <!-- Conservation de l'attribut 'reference' pour l'élément 'Article' : -->
            <xsl:attribute name="reference">
                <xsl:value-of select="@reference"/>
            </xsl:attribute>
            <!-- Ajout de l'attribut 'designation' à l'élément 'Article' à partir
            du sous-élément 'designation' : -->
            <xsl:attribute name="designation">
                <xsl:value-of select="designation"/>
            </xsl:attribute>
            <!-- On itère sur tous les sous-éléments (bien que 'designation' soit traité juste avant
            pas de duplication néanmoins : -->
            <xsl:for-each select="*">
                <xsl:attribute name="{local-name()}">
                    <!-- Problème d'un sous-élément unique pour l'élément 'PF_ou_MP_ou_Piece_ou_SE' -->
                    <xsl:choose>
                        <!-- On teste si l'élément courant a un sous-élément, en l'occurrence
                        seul l'élément 'PF_ou_MP_ou_Piece_ou_SE' est dans ce cas : -->
                        <xsl:when test="*">
                            <!-- Le *NOM* du (premier) sous-élément est accédé via Xpath : -->
                            <xsl:value-of select="name(./*[1])"/>
                        </xsl:when>
                        <xsl:otherwise>
                            <!-- '{local-name()}' ou '{local-name(.)}' pour accéder au nom de l'élément courant : -->
                            <!-- La valeur de l'élément courant est exprimée via Xpath : -->
                            <xsl:value-of select="."/>
                        </xsl:otherwise>
                    </xsl:choose> 
                </xsl:attribute>
            </xsl:for-each>
        </xsl:element>
    </xsl:template>
    <xsl:template match="Lien_de_nomenclature">
        <!-- L'élément 'Lien_de_nomenclature' reste en tant que tel : -->
        <xsl:element name="{local-name()}">
            <xsl:for-each select="*">
                <xsl:attribute name="{local-name()}">
                    <xsl:value-of select="."/>
                </xsl:attribute>
            </xsl:for-each>
        </xsl:element>
    </xsl:template>
</xsl:transform>
