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

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] Compter le nombre de fois ou une balise apparait dans un fichier xml.


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 18
    Points : 34
    Points
    34
    Par défaut [SimpleXML] Compter le nombre de fois ou une balise apparait dans un fichier xml.
    bonjour je cherche a compter le nombre de foi s ou une balise est presente dans mon fichier xml . J'ai cherche sur pas mal de forum peut etre mal mais je ne trouve pas la syntaxe pour le faire.
    Si quelqu'un connaisait une syntaxe avec simple xml ou autre pour faire cela sa m'aiderait bien.
    Voila mon code xml:
    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
    <dsml:dsml xmlns:dsml="xmlns:dsml=http://www.dsml.org/DSML">
      <dsml:directory-entries>
        <dsml:entry dn="uid=000315, ou=Agents, o=AG10G, c=fr">
          <dsml:objectclass>
            <dsml:oc-value>inetOrgPerson</dsml:oc-value>
            <dsml:oc-value>organizationPerson</dsml:oc-value>
            <dsml:oc-value>person</dsml:oc-value>
            <dsml:oc-value>Agent</dsml:oc-value>
            <dsml:oc-value>top</dsml:oc-value>
          </dsml:objectclass>
          <dsml:attr name="codhop">
            <dsml:value>081</dsml:value>
          </dsml:attr>
          <dsml:attr name="coddif">
            <dsml:value>10</dsml:value>
          </dsml:attr>
          <dsml:attr name="matricule">
            <dsml:value>000315</dsml:value>
          </dsml:attr>
          <dsml:attr name="entree">
            <dsml:value>2006-10-01</dsml:value>
          </dsml:attr>
          <dsml:attr name="civilite">
            <dsml:value>Mademoiselle</dsml:value>
          </dsml:attr>
          <dsml:attr name="nomUsuel">
            <dsml:value>NOM2-000313</dsml:value>
          </dsml:attr>
          <dsml:attr name="nomPatronymique">
    	    <dsml:value>NOJF2-000313</dsml:value>
          </dsml:attr>
          <dsml:attr name="nomMarital">
            <dsml:value>NOMM2-000313</dsml:value>
          </dsml:attr>
          <dsml:attr name="prenom">
            <dsml:value>PRENOM2-000313</dsml:value>
          </dsml:attr>
    	</dsml:entry>
    	   <dsml:entry dn="uid=000325, ou=Agents, o=AG10G, c=fr">
          <dsml:objectclass>
            <dsml:oc-value>inetOrgPerson</dsml:oc-value>
            <dsml:oc-value>organizationPerson</dsml:oc-value>
            <dsml:oc-value>person</dsml:oc-value>
            <dsml:oc-value>Agent</dsml:oc-value>
            <dsml:oc-value>top</dsml:oc-value>
          </dsml:objectclass>
          <dsml:attr name="codhop">
            <dsml:value>081</dsml:value>
          </dsml:attr>
          <dsml:attr name="coddif">
            <dsml:value>10</dsml:value>
          </dsml:attr>
          <dsml:attr name="matricule">
            <dsml:value>000325</dsml:value>
          </dsml:attr>
          <dsml:attr name="entree">
            <dsml:value>2006-10-11</dsml:value>
          </dsml:attr>
          <dsml:attr name="civilite">
            <dsml:value>Mademoiselle</dsml:value>
          </dsml:attr>
          <dsml:attr name="nomUsuel">
            <dsml:value>NOM2-000313</dsml:value>
          </dsml:attr>
          <dsml:attr name="nomPatronymique">
    	    <dsml:value>NOJF2-000113</dsml:value>
          </dsml:attr>
          <dsml:attr name="nomMarital">
            <dsml:value>NOMM2-00111</dsml:value>
          </dsml:attr>
          <dsml:attr name="prenom">
            <dsml:value>PRENOM5-000313</dsml:value>
          </dsml:attr>
    	   </dsml:entry>
    	   <dsml:entry dn="uid=000355, ou=Agents, o=AG10G, c=fr">
          <dsml:objectclass>
            <dsml:oc-value>inetOrgPerson</dsml:oc-value>
            <dsml:oc-value>organizationPerson</dsml:oc-value>
            <dsml:oc-value>person</dsml:oc-value>
            <dsml:oc-value>Agent</dsml:oc-value>
            <dsml:oc-value>top</dsml:oc-value>
          </dsml:objectclass>
          <dsml:attr name="codhop">
            <dsml:value>081</dsml:value>
          </dsml:attr>
          <dsml:attr name="coddif">
            <dsml:value>10</dsml:value>
          </dsml:attr>
          <dsml:attr name="matricule">
            <dsml:value>000355</dsml:value>
          </dsml:attr>
          <dsml:attr name="entree">
            <dsml:value>2006-10-21</dsml:value>
          </dsml:attr>
          <dsml:attr name="civilite">
            <dsml:value>Mademoiselle</dsml:value>
          </dsml:attr>
          <dsml:attr name="nomUsuel">
            <dsml:value>NOM2</dsml:value>
          </dsml:attr>
          <dsml:attr name="nomPatronymique">
    	    <dsml:value>NOJF2-</dsml:value>
          </dsml:attr>
          <dsml:attr name="nomMarital">
            <dsml:value>NOMM2-3</dsml:value>
          </dsml:attr>
          <dsml:attr name="prenom">
            <dsml:value>PRENOM2-0013</dsml:value>
          </dsml:attr>
    	   </dsml:entry>
            </dsml:directory-entries>
    </dsml:dsml>
    Je cherche ici a compter le nombre de fois ou apparait <dsml:attr name="matricule">
    tous les test que j'ai fait me retourne 0 ou 1 alors que je devrait avoir 3 en resultat:s

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Avec DOMDocument ça marche comme sur des roulettes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $doc = new DOMDocument();
    $doc->loadXML($xml);
     
    $xpath = new DOMXPath($doc);
    $xpath->registerNamespace('dsml', 'http://www.dsml.org/DSML');
    $node_list = $xpath->query('//dsml:attr[@name="matricule"]');
     
    var_dump($node_list->length);

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 18
    Points : 34
    Points
    34
    Par défaut
    merci de ta reponse je vais tester sa la probleme c'est que j'ai deja fait tout mon code en simple xml.Donc si jamais quelqun a la solution avec simple xml sa m'aiderait bien

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Sans vouloir la ramener, tu aurais quand même pu adapter mon bout de code en regardant la doc de simple XML.

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 80
    Points : 169
    Points
    169
    Par défaut
    Bonjour,

    Benjamin vous a donné une solution simple, efficace et facilement adaptable.

    Pour SimpleXML, la solution sera tout aussi simple si, comme il vous le préconise, vous lisez bien la documentation.

    Votre solution passera par :
    1 - requête xpath pour ramener tous les enregistrements correspondant à vos critères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $r = $xml->xpath('//dsml:attr[@name="matricule"]');
    2 - compter le nombre de résultats ramenés
    A noter qu'une recherche sur google avec les termes "xpath count simplexml", ainsi que la doc php (http://www.php.net/manual/en/simplexmlelement.xpath.php) sur la méthode xpath de SimpleXMLElement (dans les commentaires notamment) vous aurait tout de suite donné la réponse à votre question.

    Cdt.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    c'est dommage parce que avec DOmXpath y'a la fonction evaluate, qui te retournerai directe la valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xpath->evaluate('count(//dsml:attr[@name="matricule"])');
    tu peux utilise DOMXpath avec SimpleXML grace a dom_import_simplexml

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 18
    Points : 34
    Points
    34
    Par défaut
    Merci a vous j'ai pu ressoudre mon probleme j'ai ete voir la doc donnée par Benjamin Delespierre sur simple xml et traduit son code et s marche merci a vous

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 80
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    c'est dommage parce que avec DOmXpath y'a la fonction evaluate, qui te retournerai directe la valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xpath->evaluate('count(//dsml:attr[@name="matricule"])');
    tu peux utilise DOMXpath avec SimpleXML grace a dom_import_simplexml
    Effectivement.

    A noter aussi que la fonction count utilisée de cette manière ne fonctionne pas avec SimpleXML, ou de façon sporadique (et donc non portable) en fonction de la librairie sous-jacente à SimpleXML. Elle fonctionnera, par contre, dans des expressions conditionnelles comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $r = $xml->xpath('//noeud[count(noeud_enfant)>1]');

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/05/2015, 09h33
  2. [PowerShell] Compter le nombre de fois qu'apparaît un chaine dans un fichier
    Par olivierjouanno dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 16/04/2014, 15h07
  3. Compter le nombre de fois ou une variable apparait.
    Par Cyanatide dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 29/03/2011, 12h48
  4. Réponses: 4
    Dernier message: 06/12/2007, 16h46
  5. Réponses: 2
    Dernier message: 06/01/2006, 23h18

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