Partage
  • Partager sur Facebook
  • Partager sur Twitter

SOS XML

FEUILLE DE STYLE XSLT

    2 décembre 2016 à 12:20:19

    BONJOUR,

    Quelqu'un peut m'aider s'il vous plait?

    J'ai un fichier xsl qui calcule le nombre de points par semaine de mon fichier xml, je dois faire en sorte que mon fichier affiche en plus deux lignes

    • l’une contenant la moyenne des totaux hebdomadaires de points (donc la moyenne de {7, 30, 4}).
    • l’autre contenant la moyenne des points journaliers (donc la moyenne de {1, 3, 2, 1, 2, 8, 20, 1, 3}).

    mais cette fois sans la fonction count().

    Voici mon fichier XML

    <?xml version="1.0" encoding="utf-8"?>
    <points>
      <semaine>
        <jour>1</jour>
        <jour>3</jour>
        <jour>2</jour>
        <jour>1</jour>
      </semaine>
      <semaine>
        <jour>2</jour>
        <jour>8</jour>
        <jour>20</jour>
      </semaine>
      <semaine>
        <jour>1</jour>
        <jour>3</jour>
      </semaine>
    </points>

    et ma feuille de style

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

    <xsl:template match="/">
    <xsl:apply-templates select="*/*"/>
    <xsl:call-template name="moyenne"/>
    </xsl:template>

    <xsl:template match="*">
    <xsl:text>Il y a </xsl:text>
    <xsl:call-template name="comptage">
    <xsl:with-param name="total">0</xsl:with-param>
    <xsl:with-param name="index_courant">1</xsl:with-param>
    </xsl:call-template>
    <xsl:text> points cette semaine.&#xa;</xsl:text>
    </xsl:template>

    <xsl:template name="comptage">
    <xsl:param name="total"/>
    <xsl:param name="index_courant"/>
    <xsl:choose>
    <xsl:when test="$index_courant = count(*) + 1">
    <xsl:value-of select="$total"/>
    </xsl:when>
    <xsl:otherwise>
    <xsl:variable name="un_nombre"><xsl:value-of select="*[position() = $index_courant]"/></xsl:variable>
    <xsl:call-template name="comptage">
    <xsl:with-param name="total">
    <xsl:value-of select="$total + $un_nombre"/>
    </xsl:with-param>
    <xsl:with-param name="index_courant"><xsl:value-of select="$index_courant + 1"/></xsl:with-param>
    </xsl:call-template>
    </xsl:otherwise>
    </xsl:choose>

    </xsl:template>

    <xsl:template name="moyenne">
    <xsl:variable name="sem"><xsl:value-of select="sum(points/semaine/*)"/></xsl:variable>
    <xsl:variable name="jour"><xsl:value-of select="sum(points/semaine/jour)"/></xsl:variable>
    <!-- nbrSem= nombre de semaines et nbrJour= nombre de jours -->
    <xsl:variable name="nbrSem"><xsl:value-of select="count(points/semaine)"/></xsl:variable>
    <xsl:variable name="nbrJour"><xsl:value-of select="count(points/semaine/jour)"/></xsl:variable>
    <xsl:text>la moyenne des totaux hebdomadaires de points: </xsl:text> <xsl:value-of select="$sem div $nbrSem"/>
    <xsl:text>&#xa;la moyenne des points journaliers est : </xsl:text><xsl:value-of select="$jour div $nbrJour"/><xsl:text>&#xa;</xsl:text>
    </xsl:template>

    </xsl:stylesheet>

    j'execute avec le terminal: <tt>xsltproc fichier.xsl fichier.xml</tt>

    <tt />Merci d'avance!


    -
    Edité par NARZA 6 décembre 2016 à 17:41:16

    • Partager sur Facebook
    • Partager sur Twitter

    SOS XML

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown