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 :

[DOM] php et xml avec domdocument


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre habitué
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Points : 159
    Points
    159
    Par défaut [DOM] php et xml avec domdocument
    Bonjour,

    J'ai décidé d'apprendre à utiliser xml avec php. Jusqu'à présent j'utilisais la plupart du temps des bases de données, alor sje n'ai jamais vraiment été confronté à du XML.

    Je commence avec domdocument qui semble pas trop mal

    Voilà, mon problème est un souci d'optimisation du code. je voudrai récupérer un élément directement sans passer par un foreach. Exemple de mon xml (je passe les balise xml et dtd):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <test>
       <champ1>Hello World</champ1>
    </test>
    Je voudrai récupérer le texte (nodeValue) dans champ1 (nodeName). J'ai fait ce bout de code 'j'ai un peu simplifier sinon il audrait que je poste la class complète qui charge le fichier):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $dom = new DomDocument();
    if (! $dom->load(ROOT_DIR . "/upload/" . $name) )
       return "ERR: impossible de charger le fichier $name";
    else {
       $elements = $dom->getElementsByTagName('REPONSE')->item(0);
       $childs = $elements->childNodes;
       foreach($childs as $child) {
               if ($child->nodeName == "champ1") {
                          $text = $child->nodeValue;
               }
       }
    }
    return $text;
    Voilà, je voudrai optimiser ce code. Le champ1 dans le XML est toujours le même et ne bougera pas. Voilà, j'espère que vous aurez une super astuce pour faire ça

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    Salut !
    Il faudrait que tu donnes un exemple significatif de ton XML, parce que là j'ai envie de te dire que tu peux faire directement un $dom->getElementsByTagName('champ1')->item(0)->nodeValue, mais je suppose que ça ne suffira pas.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre habitué
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Points : 159
    Points
    159
    Par défaut
    Voilà mon fichier de xml de test:

    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
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <TEST>
    	<CHAMP1>OK</CHAMP1>
            <CHAMP2>Hello World</CHAMP2>
    	<NIVEAU1>
    		<NIVEAU2>
    			<ITEM1>Mangerrrrr</ITEM1>
    			<ITEM2>bannanes, mangues</ITEM2>
    		</NIVEAU2>
    		<NIVEAU2>
    			<ITEM1>Boireeee</ITEM1>
    			<ITEM2>coca, eau</ITEM2>
    		</NIVEAU2>
    	</NIVEAU1>
    </TEST>
    C'est un fichier xml qui me permet de découvrir DomDocument Mais je ne veux pas juste arriver à afficher les éléménts, je veux apprendre à travailler avec.

    En gros, je récupère CHAMP1, je vérifie sir la valeur est OK, je récupère tout le reste.
    Donc je veux arriver au final à avoir un array contenant les champs et les valeurs associées.

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [CHAMP2] -> Hello World
    [NIVEAU2] ->
         [Mangerrrrr] -> bannanes, mangues
         [Boireeee] -> coca, eau
    Donc finalement arriver à créer un array qui contient les valeurs de plusieurs niveaux. J'ajouterai un autre niveau dans NIVEAU2 pour voir si l'array arrive à récupérer les éléments automatiquement

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    C'est un fichier xml qui me permet de découvrir DomDocument
    Alors le code donné plus haut convient.

    je veux arriver au final à avoir un array contenant les champs et les valeurs associées.
    Pour ça SimpleXML peut suffire.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Membre habitué
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Points : 159
    Points
    159
    Par défaut
    Bon alors je suis en train de tout passer en simplexml. je recommence de zéro (bien que je n'étais pas vraiment avancé lol).

    J'essaie avec SimpleXMLElement et je reviens si je n'y arrive pas :p

    Merci pour le conseil.

  6. #6
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Une autre manière plus rapide c'est d'utiliser xpath.
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

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

Discussions similaires

  1. [PHP 5.6] PHP to XML avec DOMDocument
    Par slozano dans le forum Langage
    Réponses: 13
    Dernier message: 14/11/2018, 15h34
  2. [DOM] lire du xml avec du javascript
    Par redah75 dans le forum Général JavaScript
    Réponses: 45
    Dernier message: 12/09/2008, 17h18
  3. [DOM] PHP et XML pour stocker et afficher des données
    Par sasaas dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 22/02/2008, 18h20
  4. [DOM] lire un fichier avec DOMDocument
    Par pimpmyride dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 26/05/2007, 15h54
  5. [DOM] Faire un tri avec Domdocument
    Par starr dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 25/03/2007, 20h31

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