IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSLT] max d'une somme?


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut [XSLT] max d'une somme?
    Bonjour,

    cela fait quelques jours que je me croque le cerveau sur ce problème et je décide donc de me tourner vers vous tous.

    Je dispose de fichiers XML comprenant, entre autres, les données suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <word id="a01-000u-00-01" tag="NN" text="MOVE">
            <cmp x="507" y="768" width="63" height="46" />
            <cmp x="568" y="770" width="56" height="41" />
            <cmp x="631" y="768" width="38" height="41" />
            <cmp x="676" y="772" width="31" height="36" />
            <cmp x="691" y="766" width="29" height="12" />
    </word>
    que je dois transformer en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <WORD><BBW>507,766,720,814</BBW><LABEL>MOVE</LABEL></WORD>
    le 507 est le min des x, le 766 le min des y, le 720 le max des sommes x+width pour chaque composante, et le 814 le max des y+height.

    j'ai réussi à obtenir les 507 et 766 comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:variable name="X1">
    <xsl:for-each select="cmp/@x">
        <xsl:sort data-type="number" order="ascending"/>
        <xsl:if test="position() = 1">
            <xsl:value-of select="number(.)"/>
        </xsl:if>
        </xsl:for-each>
    </xsl:variable>
    (et de même pour y avec cmp/@y)

    En revanche, je n'arrive pas à sortir la somme
    j'ai testé de mettre <xsl:for-each select="cmp/@x + cmp/@width">, mais il n'apprécie pas du tout ^^
    j'avais pensé faire 2 variables, les sommer, en faire une liste, puis les organiser et prendre celui qui m'interessait, mais je n'arrive pas à l'implémenter.

    On m'a suggéré d'insérer du code C dans tout ça, mais c'est pas vraiment quelque chose que je sais faire ^^'

    Si l'un de vous a une idée/solution...
    Merci bien ^^

    PS: je code sous XMLSpy 2007

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Bon, j'ai réussi à calculer mon max, mais par une méthode pas jolie du tout :
    j'utilise 2 xsl que j'applique successivement.
    Le premier fait les sommes x+width et y+height, et le deuxième récupère les max.

    Mais n'y a t il pas mieux?

    quoiqu'il en soit, il me reste maintenant 2 problèmes:

    1) dans mes fichiers xml à transformer, il est fait référence à une DTD, et cela pose problème car l'éditeur ne la trouve pas, ce qui est ennuyeux car elle ne me sert finalement à rien, et je n'arrive pas à appliquer la feuille de style sur un fichier ou je n'ai pas retiré la Doctype declaration.

    2) Je dois appliquer ce .xsl à 1500 fichiers xml, tous dans le même dossier...
    là je dois avouer être complètement largué

    Merci

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Bon, ben finalement j'ai résolu ça avec du bon vieux java très sale, qui supprime les lignes concernant la DTD et applique mes fichiers xsl.
    c'est bourrin et moche, mais c'est pas pour une appli, donc ça suffit

    après si quelqu'un a une solution "jolie" je dis pas non, pour la culture

  4. #4
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:for-each select="cmp">
        <xsl:sort data-type="number" select="@x+@width" order="ascending"/>
        <xsl:if test="position() = 1">
            <xsl:value-of select="@x+@width"/>
        </xsl:if>
        </xsl:for-each>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/03/2014, 16h19
  2. Fonction MAX dans une condition WHERE
    Par borgfabr dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/10/2004, 16h06
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  4. [XSLT] Manipulation d'une String
    Par Eskarina43 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/06/2004, 11h52
  5. [CR 8.5] Calculer la somme d'une somme
    Par Frederic Vincent dans le forum Formules
    Réponses: 4
    Dernier message: 12/02/2004, 17h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo