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 :

Lister le nombres d'attributs vides


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 154
    Points : 3 667
    Points
    3 667
    Par défaut Lister le nombres d'attributs vides
    Bonjour,

    Je cherche à faire une liste d'attributs vides. J'arrive à parcourir et à afficher mais je n'arrive pas à créer un compteur qui me permet de connaitre le nombre exacte d'attributs vide.

    Merci.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Non ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Avatar de VforVincent
    Homme Profil pro
    Doctorant (EPUB 3.0)
    Inscrit en
    Avril 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Doctorant (EPUB 3.0)
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 115
    Points : 265
    Points
    265
    Par défaut
    Je corse un peu la question. Je vais essayer de produire un peu de code de mon côté, mais si quelqu'un trouve avant, il sera le champion !

    Supposons des attributs vides. Il y en aurait au moins 2, qui seraient présents 1 fois ou plus.

    Maintenant nous aimerions établir la liste de ces attributs, avec le nombre d'occurrences entre parenthèses. Nous ne voulons pas de doublons dans cette liste. Ainsi, je n'aurais par exemple qu'une seule ligne mentionnant l'attribut "id".

    Petit exemple du résultat attendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Voici la liste des attributs vides :
    - @id (234)
    - @type (117)
    - @style (8)
    Je viens de me poser la question, donc je n'ai ni code source, ni proposition, mais je vais réfléchir là-dessus, je trouve le sujet intéressant... Enfin je crois. Non ?!

    "The power of the Web is in its universality.
    Access by everyone regardless of disability is an essential aspect."

    Tim Berners-Lee, W3C Director and inventor of the World Wide Web

  4. #4
    Membre expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 154
    Points : 3 667
    Points
    3 667
    Par défaut
    Merci thelVin pour l'aide .

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par VforVincent Voir le message
    Je corse un peu la question. Je vais essayer de produire un peu de code de mon côté, mais si quelqu'un trouve avant, il sera le champion !

    Supposons des attributs vides. Il y en aurait au moins 2, qui seraient présents 1 fois ou plus.

    Maintenant nous aimerions établir la liste de ces attributs, avec le nombre d'occurrences entre parenthèses. Nous ne voulons pas de doublons dans cette liste. Ainsi, je n'aurais par exemple qu'une seule ligne mentionnant l'attribut "id".

    Petit exemple du résultat attendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Voici la liste des attributs vides :
    - @id (234)
    - @type (117)
    - @style (8)
    Je viens de me poser la question, donc je n'ai ni code source, ni proposition, mais je vais réfléchir là-dessus, je trouve le sujet intéressant... Enfin je crois. Non ?!
    - Muench pour avoir la liste dédupliquée des noms d'attributs vides
    - pour chaque attribut, pour obtenir son nombre, count() sur la clé.

    Quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:key name="empty-attrs" match="@*[. = '']" use="name()"/>
     
    <xsl:template match="/">
      <xsl:for-each select="//@*[. = '' and generate-id(.) = generate-id(key('empty-attrs', name()))]">
        <xsl:value-of select="concat('@', name(), ' (', count(key('empty-attrs', name())), ')')"/>
    <xsl:text>
    </xsl:text>
      </xsl:for-each>
    </xsl:template>
    À noter que vu que je n'utilise que name() et pas namespace-uri(), il peut possiblement y avoir confusion dans les namespaces. Une solution possible serait d'avoir concat( namespace-uri(), '|', local-name() ) comme use.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre actif
    Avatar de VforVincent
    Homme Profil pro
    Doctorant (EPUB 3.0)
    Inscrit en
    Avril 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Doctorant (EPUB 3.0)
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 115
    Points : 265
    Points
    265
    Par défaut
    Permettons-nous ce matin une interjection : Purée !

    J'étais bloqué sur le count... j'ai pas pensé un seul instant à réutiliser la clé... n'importe quoi.

    En tout cas c'est super sympa d'avoir répondu à la question subsidiaire !

    "The power of the Web is in its universality.
    Access by everyone regardless of disability is an essential aspect."

    Tim Berners-Lee, W3C Director and inventor of the World Wide Web

  7. #7
    Membre actif
    Avatar de VforVincent
    Homme Profil pro
    Doctorant (EPUB 3.0)
    Inscrit en
    Avril 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Doctorant (EPUB 3.0)
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 115
    Points : 265
    Points
    265
    Par défaut
    J'ai parlé trop vite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Description: A sequence of more than one item is not allowed as the first argument of generate-id() (@id, @id, ...) 
    Emplacement de début: 12:0
    URL: http://www.w3.org/TR/xpath20/#ERRXPTY0004
    J'ai soudainement prix peur, pensant que le problème serait insoluble... Mais finalement il ne manquait qu'une bricole, un petit [1] pour dire que l'on ne veut qu'une seule fois l'item détecté (on n'a pas besoin de tous les détecter, juste le premier ; pour compter par contre, il nous les faut tous).

    Voici donc ce que je propose (en fait la même chose quasiment) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        exclude-result-prefixes="xs"
        version="2.0">
     
        <xsl:output encoding="UTF-8" method="text"/>
     
        <xsl:key name="empty-attrs" match="//@*[. = '']" use="name()"/>
     
        <xsl:template match="/">
            <xsl:text>VOICI LA LISTE DES ELEMENTS VIDES :</xsl:text>
            <xsl:for-each select="//@*[. = '' and generate-id(.) = generate-id(key('empty-attrs', name())[1])]">
                <xsl:text>
    </xsl:text>
                <xsl:value-of select="concat('@', name(), ' (', count(key('empty-attrs', name())), ')')"/>
    </xsl:for-each>
        </xsl:template>
    </xsl:stylesheet>
    Le petit fichier XML que j'ai utilisé (fait vite fait à la mano, à partir du contenu d'un ePub) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    <?xml version="1.0" encoding="UTF-8"?>
      <folder> 
     <file type="" id="">content.opf</file> 
     <file id="">Fonts</file> 
     <file id="">Images</file> 
     <file id="">Styles</file> 
     <file id="">Text</file> 
     <file id="">toc.ncx</file> 
     <file id="">12AB668D.jpg</file> 
     <file id="">18EE4028.jpg</file> 
     <file id="">1B20E28.jpg</file> 
     <file id="">22869CD4.jpg</file> 
     <file id="">2C1D56A9.jpg</file> 
     <file id="">30B650F0.jpg</file> 
     <file id="">31ED74E2.jpg</file> 
     <file id="">3311B921.jpg</file> 
     <file id="">33722800.jpg</file> 
     <file id="">344D205C.jpg</file> 
     <file id="">3495126B.jpg</file> 
     <file id="">371430D3.jpg</file> 
     <file id="">41C47B98.jpg</file> 
     <file id="">49BF2043.jpg</file> 
     <file id="">4B3A6B3D.jpg</file> 
     <file id="">5049F7CA.jpg</file> 
     <file id="">51BB7717.jpg</file> 
     <file id="">534B8A4C.jpg</file> 
     <file id="">5465227C.jpg</file> 
     <file id="">57AD8053.jpg</file> 
     <file id="">57F4D43F.jpg</file> 
     <file id="">5A5E9811.jpg</file> 
     <file id="">5F6748AD.jpg</file> 
     <file id="">6A173560.jpg</file> 
     <file id="">6A173561.jpg</file> 
     <file id="">6A173562.jpg</file> 
     <file id="">6A173563.jpg</file> 
     <file id="">6A173564.jpg</file> 
     <file id="">6A173565.jpg</file> 
     <file id="">6A173566.jpg</file> 
     <file id="">6A173567.jpg</file> 
     <file id="">6A17356E.jpg</file> 
     <file id="">6CC53C10.jpg</file> 
     <file id="">730748BE.jpg</file> 
     <file id="">76A38FE4.jpg</file> 
     <file id="">771E2ED9.jpg</file> 
     <file id="">77CF6BCC.jpg</file> 
     <file id="">79595AF5.jpg</file> 
     <file id="">7BE5BE9E.jpg</file> 
     <file id="">7BE5BEA2.jpg</file> 
     <file id="">7BE5BEA3.jpg</file> 
     <file id="">7BE5BEA4.jpg</file> 
     <file id="">7BE5BEA5.jpg</file> 
     <file id="">7BE5BEA6.jpg</file> 
     <file id="">7BE5BEAC.jpg</file> 
     <file id="">7BE5BEAD.jpg</file> 
     <file id="">7BE5BEAE.jpg</file> 
     <file id="">81A137DD.jpg</file> 
     <file id="">81EB3EE3.jpg</file> 
     <file id="">82F7C098.jpg</file> 
     <file id="">8857BCE9.jpg</file> 
     <file id="">899131C3.jpg</file> 
     <file id="">8BBE7923.jpg</file> 
     <file id="">8BED6169.jpg</file> 
     <file id="">8C965D26.jpg</file> 
     <file id="">8C965D27.jpg</file> 
     <file id="">8C965D28.jpg</file> 
     <file id="">8C965D29.jpg</file> 
     <file id="">8C965D2A.jpg</file> 
     <file id="">8C965D2B.jpg</file> 
     <file id="">8C965D2F.jpg</file> 
     <file id="">8C965D38.jpg</file> 
     <file id="">8C965D3B.jpg</file> 
     <file id="">90BF587C.jpg</file> 
     <file id="">90E91682.jpg</file> 
     <file id="">93AC4F6C.jpg</file> 
     <file id="">9A51A4A2.jpg</file> 
     <file id="">9AFE75CD.jpg</file> 
     <file id="">9E4A72AD.jpg</file> 
     <file id="">9E977268.jpg</file> 
     <file id="">A153C2A0.jpg</file> 
     <file id="">A1FBB1BC.jpg</file> 
     <file id="">A3CDFEFD.jpg</file> 
     <file id="">A671A7FA.jpg</file> 
     <file id="">A7674855.jpg</file> 
     <file id="">A7674856.jpg</file> 
     <file id="">A7674857.jpg</file> 
     <file id="">A7674859.jpg</file> 
     <file id="">A767485A.jpg</file> 
     <file id="">A767485B.jpg</file> 
     <file id="">A767485E.jpg</file> 
     <file id="">A767485F.jpg</file> 
     <file id="">A7674869.jpg</file> 
     <file id="">A8550FE4.jpg</file> 
     <file id="">A9384B12.jpg</file> 
     <file id="">AB5A3B4D.jpg</file> 
     <file id="">AD7451DD.jpg</file> 
     <file id="">ADCFF440.jpg</file> 
     <file id="">B41B7EE8.jpg</file> 
     <file id="">B4466130.jpg</file> 
     <file id="">B76538D8.jpg</file> 
     <file id="">B76538D9.jpg</file> 
     <file id="">B76538DA.jpg</file> 
     <file id="">B76538DB.jpg</file> 
     <file id="">B76538DE.jpg</file> 
     <file id="">B76538E6.jpg</file> 
     <file id="">B76538E8.jpg</file> 
     <file id="">B76538E9.jpg</file> 
     <file id="">B76538EA.jpg</file> 
     <file id="">BCE8C52A.jpg</file> 
     <file id="">BE633A30.jpg</file> 
     <file id="">C82630FC.jpg</file> 
     <file id="">C8B88209.jpg</file> 
     <file id="">C9607125.jpg</file> 
     <file id="">CA9BE9F3.jpg</file> 
     <file id="">CDA11558.jpg</file> 
     <file id="">CF1B959A.jpg</file> 
     <file id="">cover.jpg</file> 
     <file id="">D8F31AC1.jpg</file> 
     <file id="">DA3B24F1.jpg</file> 
     <file id="">DA964185.jpg</file> 
     <file id="">DF2F9F39.jpg</file> 
     <file id="">E8348D21.jpg</file> 
     <file id="">E9CEC35D.jpg</file> 
     <file id="">F045304D.jpg</file> 
     <file id="">F2FE64A4.jpg</file> 
     <file id="">FF2BD6BD.jpg</file> 
     <file id="">FF5754D5.jpg</file></folder>
    Et le résultat, très très simplissime :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    VOICI LA LISTE DES ELEMENTS VIDES :
    @type (1)
    @id (124)
    Je pense que ça va me servir (pour des petits logs), donc encore merci thelvin

    "The power of the Web is in its universality.
    Access by everyone regardless of disability is an essential aspect."

    Tim Berners-Lee, W3C Director and inventor of the World Wide Web

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Si tu fais du XSLT 2.0, il y a bien plus simple qu'un Muench : for-each-group est là pour ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:for-each-group select="//@*[. = '']" group-by="name()">
      <xsl:value-of select="concat('@', current-grouping-key())"/>
      <xsl:text> (</xsl:text>
      <xsl:value-of select="count(current-group())"/>
      <xsl:text>)
    </xsl:text>
    </xsl:for-each-group>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre actif
    Avatar de VforVincent
    Homme Profil pro
    Doctorant (EPUB 3.0)
    Inscrit en
    Avril 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Doctorant (EPUB 3.0)
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 115
    Points : 265
    Points
    265
    Par défaut
    Oserai-je ? .......................................................................

    Pour être honnête, j'ai créé une XSLT par défaut dans oxygen/, qui met automatiquement la version XSLT 2.0 ...

    Mais cette inattention a provoqué l'arrivée d'un autre bout de code, donc bénissons le hasard qui fait bien les choses !

    J'avoue ne pas trop connaître le 2.0 (à part quelques bricoles), mais si on a ce genre de choses, alors je vais certainement lire de-ci de-là quelques informations...

    "The power of the Web is in its universality.
    Access by everyone regardless of disability is an essential aspect."

    Tim Berners-Lee, W3C Director and inventor of the World Wide Web

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je disais ça parce que generate-id() ne fait pas d'erreur si on ne met pas le [1] en XSLT 1.0.
    Ceci étant parce qu'en XSLT/XPath 1.0 la notion de séquence n'existe pas. La seule notion d'ensemble c'est les ensembles de nœuds, et generate-id() prend le premier.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre actif
    Avatar de VforVincent
    Homme Profil pro
    Doctorant (EPUB 3.0)
    Inscrit en
    Avril 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Doctorant (EPUB 3.0)
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 115
    Points : 265
    Points
    265
    Par défaut
    Et donc la leçon du jour les enfants : faites attention à votre version XSLT.

    On a donc 3 codes pour le prix d'une question si je comprend bien (le mien étant un hybride à ne pas suivre).

    "The power of the Web is in its universality.
    Access by everyone regardless of disability is an essential aspect."

    Tim Berners-Lee, W3C Director and inventor of the World Wide Web

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

Discussions similaires

  1. Sous-Formulaire nombre de lignes vides ?
    Par popo68 dans le forum IHM
    Réponses: 25
    Dernier message: 11/12/2006, 09h28
  2. [Tableaux] Lister des nombres
    Par Klimium dans le forum Langage
    Réponses: 9
    Dernier message: 21/10/2006, 15h00
  3. Lister le Nombre de port série ?
    Par SebRs dans le forum Windows
    Réponses: 4
    Dernier message: 03/05/2006, 17h48
  4. [XML] Importance du nombre d'attributs
    Par nemya dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 19/12/2005, 17h16
  5. Réponses: 1
    Dernier message: 08/11/2005, 14h40

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