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

Langage PHP Discussion :

chercher un 'fils' avec simpleXML


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 68
    Points
    68
    Par défaut chercher un 'fils' avec simpleXML
    Bonjour,
    J'ai un script php où je fais appel à simpleXML pour manipuler une chaine de caractères sous format xml,donc j'ai mon code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <Carte>
      <Nbr_cartes>2</Nbr_cartes>
      <Stat_Ip>4119</Stat_Ip>
      <Type_carte>DTA-115 (#2)</Type_carte>
      <Taux_flux_transport>-858993460 bps</Taux_flux_transport>
      <Type_Modulation>?</Type_Modulation>
      <Frequence>578.00 MHz</Frequence>
      <Niveau_signal>-27.5 dBm</Niveau_signal>
      <Adresse_IP>204.204.204.204:52428</Adresse_IP>
      <Protocole>UDP</Protocole>
    </Carte>
    je veux savoir comment on teste si un 'fils' de l'elément existe ou pas,c'est à dire je veux savoir par exemple s'il y a une balise qui s'appelle 'Frequence' genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If hasChild('Frequence).....
    j'ai trouvé les deux fonctions SimpleXMLElement::children et SimpleXMLIterator::hasChildren mais je ne sais pas est ce qu'on peut chercher exactement un nom de child avec? merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Voici une manière de faire :
    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
    <?php
     
    $str = <<<'XML'
    <Carte>
        <Nbr_cartes>2</Nbr_cartes>
        <Stat_Ip>4119</Stat_Ip>
        <Type_carte>DTA-115 (#2)</Type_carte>
        <Taux_flux_transport>-858993460 bps</Taux_flux_transport>
        <Type_Modulation>?</Type_Modulation>
        <Frequence>578.00 MHz</Frequence>
        <Niveau_signal>-27.5 dBm</Niveau_signal>
        <Adresse_IP>204.204.204.204:52428</Adresse_IP>
        <Protocole>UDP</Protocole>
    </Carte>
    XML;
     
    $xml   = simplexml_load_string($str);
    $nodes = $xml->xpath('/Carte/Adresse_IP');
    $b     = empty($nodes);  // false
     
    $nodes = $xml->xpath('/Carte/Absent');
    $b     = empty($nodes);  // true
     
    ?>

  3. #3
    Membre du Club
    Profil pro
    Bricoleur
    Inscrit en
    Septembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Bricoleur

    Informations forums :
    Inscription : Septembre 2011
    Messages : 56
    Points : 61
    Points
    61
    Par défaut
    Le temps que je regarde SimpleXMLIterator une élégante solution avec xpath. Mais bon si tu veux utiliser l'itérateur :
    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
     
    <?php
    $xml = <<<XML
    <books>
        <book>
            <title>PHP Basics</title>
            <author>Jim Smith</author>
        </book>
        <book>XML basics</book>
    </books>
    XML;
     
    $xmlIterator = new SimpleXMLIterator($xml);
    for( $xmlIterator->rewind(); $xmlIterator->valid(); $xmlIterator->next() ) {
        foreach($xmlIterator->getChildren() as $name => $data) {
           if($name =='author') {
             ... ;
          }
        }
    }
    ?>

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 68
    Points
    68
    Par défaut
    merci CBresso et rawsrc ,la méthode avec 'xpath' marche très bien

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

Discussions similaires

  1. [SimpleXML] Est-il possible d'utiliser des expressions XPATH 2.0 avec simplexml ?
    Par ANISSS dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 09/11/2006, 09h14
  2. [XPath][SimpleXML] probleme avec simplexml et xpath
    Par ANISSS dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/10/2006, 16h54
  3. [SimpleXML] Problème avec simplexml
    Par hxt dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 20/07/2006, 16h17
  4. Problème de sessions avec SimpleXml
    Par laetyboop dans le forum Langage
    Réponses: 7
    Dernier message: 12/05/2006, 10h17
  5. [xml] pb avec simplexml
    Par BernardT dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 20/04/2006, 17h19

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