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] Lister certains éléments


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Septembre 2012
    Messages : 81
    Par défaut [SimpleXML] Lister certains éléments
    Bonjour à tous,
    Je souhaiterai lister uniquement certains éléments comme par exemple "Cores", "Name" et "Code Name".

    J'ai essayé rapidement un bout de code, mais qui n'est pas vraiement approprié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
     $produits = simplexml_load_file('fichier.xml');  
     foreach ($produits->mainsection[2]->section->entry as $produit)
     {
      if ($produit['title'] == 'Name')
      echo "Nom : {$produit['value']}";	
     }
    ?>
    Voici un extrait du fichier 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
    <mainsection title="CPU" id="2">
       <section title="Intel Pentium G620">
          <entry title="Cores" value="2"/>
          <entry title="Threads" value="2"/>
          <entry title="Name" value="Intel Pentium G620"/>
          <entry title="Code Name" value="Sandy Bridge"/>
          <entry title="Package" value="Socket 1155 LGA"/>
          <entry title="Technology" value="32nm"/>
          <entry title="Specification" value="Intel Pentium CPU G620 @ 2.60GHz"/>
          <entry title="Family" value="6"/>
          <entry title="Extended Family" value="6"/>
          <entry title="Model" value="A"/>
          <entry title="Extended Model" value="2A"/>
          <entry title="Stepping" value="7"/>
          <entry title="Revision" value="D2"/>
          <entry title="Instructions" value="MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, Intel 64"/>
          <entry title="Virtualization" value="Supported, Disabled"/>
          <entry title="Hyperthreading" value="Supported, Disabled"/>
          <entry title="Fan Speed" value="1981 RPM"/>
          <entry title="Bus Speed" value="99.8 MHz"/>
          <entry title="Stock Core Speed" value="2600 MHz"/>
          <entry title="Stock Bus Speed" value="100 MHz"/>
          <entry title="Average Temperature" value="37 °C"/>
       </section>
    </mainsection>
    J'ai essayé un autre solution, qui semble plus pratique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $value =  $produits->xpath('/mainsection[@title="CPU"]/section/entry[@title="Name"]');
    echo $value[0]->attributes()->value;
    Merci d'avance.

  2. #2
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Et c'est quoi la question ?

    Le meilleure des deux solutions ? Moi je dirais la 2 car plus directe

    Mais quand nous utilisons xpath, c'est à partir d'une requête non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    $dom_object = new DomDocument();
    $dom_object->load("fichier.xml");
    $xpath = new Domxpath($dom_object);
    $result = $xpath->query("//pop[./requête/.");
    foreach ($result as $exercise) {
         print "<pre>" . $exercise->nodeValue. "</pre>\n";
    }
    ?>

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Billets dans le blog
    12
    Par défaut
    Salut,

    en itératif cela donnerait quelque chose comme ça :
    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
    <?php
     
    $xml =
    <<<XML
    <data>
        <mainsection title="CPU" id="2">
           <section title="Intel Pentium G620">
              <entry title="Cores" value="2"/>
              <entry title="Threads" value="2"/>
              <entry title="Name" value="Intel Pentium G620"/>
              <entry title="Code Name" value="Sandy Bridge"/>
              <entry title="Package" value="Socket 1155 LGA"/>
              <entry title="Technology" value="32nm"/>
              <entry title="Specification" value="Intel Pentium CPU G620 @ 2.60GHz"/>
              <entry title="Family" value="6"/>
              <entry title="Extended Family" value="6"/>
              <entry title="Model" value="A"/>
              <entry title="Extended Model" value="2A"/>
              <entry title="Stepping" value="7"/>
              <entry title="Revision" value="D2"/>
              <entry title="Instructions" value="MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, Intel 64"/>
              <entry title="Virtualization" value="Supported, Disabled"/>
              <entry title="Hyperthreading" value="Supported, Disabled"/>
              <entry title="Fan Speed" value="1981 RPM"/>
              <entry title="Bus Speed" value="99.8 MHz"/>
              <entry title="Stock Core Speed" value="2600 MHz"/>
              <entry title="Stock Bus Speed" value="100 MHz"/>
              <entry title="Average Temperature" value="37 °C"/>
           </section>
        </mainsection>
    </data>
    XML;
     
    /** @var SimpleXMLElement */
    $dom  = new SimpleXMLElement($xml);
    $data = array();
     
    $main_sections = array('CPU');
    $attributes    = array('Cores', 'Name', 'Code Name');
     
    foreach($dom as $main) {
        $main_title = (string)$main['title'];
        if (in_array($main_title, $main_sections, true)) {
            $values = array();
            foreach($main->children()->children() as $k => $v) {
                $title = (string)$v['title'];
                if (in_array($title, $attributes, true)) {
                    $values[$title] = (string)$v['value'];
                }
            }
            if ( ! empty($values)) {
                $data[$main_title][] = $values;
            }
        }
    }
     
    print_r($data);
     
    ?>

  4. #4
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Septembre 2012
    Messages : 81
    Par défaut
    J'ai essayé autrement (le fichier xml utilisé dans ce code ne correspond pas au premier cité plus haut).
    Je souhaiterai un avis sur le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?
    include("hardware_class.php");
    $values = new hardware();
    $values->xml_file ="0.xml";
    $values->read_node();	
    ?>
    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
    <?
    class hardware {
    	var $xml_file;
    	var $node_list = array(
    	1 => "//Property[Entry='Mainboard Manufacturer']",
    	2 => "//Property[Entry='Mainboard Name']",
    	3 => "//Property[Entry='Motherboard Chipset']",
    	4 => "//Property[Entry='Case Type']"
    	);
     
    	function read_node()
    	{
    		foreach ($this->node_list as $key => $value)
    		{
    			$xml_node = $this->node_list[$key];
    			$xml = simplexml_load_file($this->xml_file);
    			$node = $xml->xpath($xml_node);
    			echo $node[0]->Entry.": ".$node[0]->Description."<br>";
    		}
    	} 
    }
    ?>
    Merci.

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

Discussions similaires

  1. Lister les éléments d'un tableau
    Par uado dans le forum ASP
    Réponses: 8
    Dernier message: 22/05/2006, 13h02
  2. Réponses: 5
    Dernier message: 26/04/2006, 17h36
  3. Cacher certains éléments d'un site lors de l'impression
    Par beegees dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 04/04/2006, 17h56
  4. [JTree] Cacher certains éléments ...
    Par JamesP dans le forum Composants
    Réponses: 5
    Dernier message: 15/02/2006, 20h16

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