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] récupérer portion d'un code XML


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 130
    Par défaut [DOM] récupérer portion d'un code XML
    bonjour a tous,
    je voudrais savoir s'il y a un moyen de récupérer dans un fichier un portion de code XML (délimité par une balise et sa balise fermante) qui est sur un autre fichier.
    merci

  2. #2
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    avec la librairie dom ou simpleXML c'est très possible

    tu peux y trouver de très bon tutoriaux sur la partie cours PHP

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 130
    Par défaut
    j'ai lu le tuto de DOM,j'ai pas trouvé ce que je cherche,je reviens a un exemple du tuto de DOM:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
    <!DOCTYPE continents SYSTEM "test.dtd">
    <continents>
    <europe>
    <pays regime="republique">France</pays>
    <pays regime="monarchie constitutionnelle">Belgique</pays>
    <pays regime="monarchie constitutionnelle">Espagne</pays>
    </europe>
    <asie>
    <pays regime="empire">Japon</pays>
    <pays>Inde</pays>
    </asie>
    </continents>
    je voudrais faire un truc du genre,récupérer ce qu'il y a entre la balise <continents> et </continents>
    pour avoir en sortie ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <europe>
    <pays regime="republique">France</pays>
    <pays regime="monarchie constitutionnelle">Belgique</pays>
    <pays regime="monarchie constitutionnelle">Espagne</pays>
    </europe>
    <asie>
    <pays regime="empire">Japon</pays>
    <pays>Inde</pays>
    </asie>
    pouvez vous m'aider svp?

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Récupérer les éléments fils de <continents> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
        header('Content-Type: text/plain') ;
     
        $dom = new DOMDocument( ) ;
        $dom->load('chemin/vers/fichier.xml') ;
     
        $continents = $dom->getElementsByTagName('continents')->item(0) ;
     
        $buffer = '' ;
        for ( $i = 0 ; $i < $continents->childNodes->length ; $i++ ) {
            $buffer .= $dom->saveXML($continents->childNodes->item($i)) ;
        }
        echo $buffer ;
    ?>
    Donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <europe>
    <pays regime="republique">France</pays>
    <pays regime="monarchie constitutionnelle">Belgique</pays>
    <pays regime="monarchie constitutionnelle">Espagne</pays>
    </europe>
    <asie>
    <pays regime="empire">Japon</pays>
    <pays>Inde</pays>
    </asie>

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 130
    Par défaut
    merci beaucoup, juste une dernière question, est-ce que c'est possible d'afficher dans le même fichier php, car là à l'exécution il m'ouvre la portion de code que je veux dans un buffer !!
    merci

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Oui, suffit d'adapter le script que j'ai collé !!

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 130
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Oui, suffit d'adapter le script que j'ai collé !!
    merci bcp,ça marche,
    encore une question,
    je modifie le xml un peu
    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
     
    <continents id="0">
    <europe>
    <pays regime="republique">France</pays>
    <pays regime="monarchie constitutionnelle">Espagne</pays>
    </europe>
    <asie>
    <pays regime="empire">Japon</pays>
    <pays>Inde</pays>
    </asie>
    </continents>
    <continents id="1">
    <afrique>
    <pays>Algérie</pays>
    <pays>Kenya</pays>
    </afrique>
    <amerique>
    <pays>Colombie</pays>
    </amerique>
    </continents>
    si je veux par exemple récupérer ce qu'il y a entre la balise <continent> tel que id="0" comment modifier le script pour cela?
    merci encore

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Il faut boucler sur les <continents> récupérés avec getElementsByTagName( ) et tester pour chaque si getAttribute('id') === '0'.

    http://www.php.net/manual/fr/domdocu...sbytagname.php
    http://www.php.net/manual/fr/domelem...tattribute.php

    Bon développement,

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 130
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Il faut boucler sur les <continents> récupérés avec getElementsByTagName( ) et tester pour chaque si getAttribute('id') === '0'.

    http://www.php.net/manual/fr/domdocu...sbytagname.php
    http://www.php.net/manual/fr/domelem...tattribute.php

    Bon développement,
    j'ai essayé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ....
    $continents = $dom->getElementsByTagName('continents')->item(0) ;
    foreach ($continents as $x){
     if ($x->getAttribute('id')=='0') {
        $buffer = '' ;
        for ( $i = 0 ; $i < $continents->childNodes->length ; $i++ ) {
            $buffer .= $dom->saveXML($continent->childNodes->item($i)) ;
        }}
    ....
    mais ça marche pas,tu peux me corriger mon code stp?

  10. #10
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Il faut enlever le ->item(0), autrement tu ne récupères que le 1er <continents>.

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 130
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Il faut enlever le ->item(0), autrement tu ne récupères que le 1er <continents>.
    ça marche tjr pas!!
    mon script:
    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
     
        header('Content-Type: text/plain') ;
     
        $dom = new DOMDocument( ) ;
        $dom->load('f1.xml') ;
     
    $continents = $dom->getElementsByTagName('continents');
    foreach ($continents as $x){
     if ($x->getAttribute('id')=='0') {
     
     
        $buffer = '' ;
     
        for ( $i = 0 ; $i < $v1->childNodes->length ; $i++ ) {
            $buffer .= $dom->saveXML($v1->childNodes->item($i)) ;
        }}}
    $xs='psm/m3.txt';
    $fichier = fopen($xs, 'a+');
    fputs($fichier,$buffer);  
    fclose($fichier);
    mon 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
     
    <test>
    <continents id="0">
    <europe>
    <pays regime="republique">France</pays>
    <pays regime="monarchie constitutionnelle">Espagne</pays>
    </europe>
    <asie>
    <pays regime="empire">Japon</pays>
    <pays>Inde</pays>
    </asie>
    </continents>
    <continents id="1">
    <afrique>
    <pays>Algerie</pays>
    <pays>Kenya</pays>
    </afrique>
    <amerique>
    <pays>Colombie</pays>
    </amerique>
    </continents>
    </test>
    apparament il ne rentre meme pas dans le IF

  12. #12
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    D'où vient $v1 ?

    De plus c'est généralement une mauvaise idée d'utiliser le + dans les modes d'ouverture de fichier.

  13. #13
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 130
    Par défaut
    Citation Envoyé par Séb. Voir le message
    D'où vient $v1 ?

    De plus c'est généralement une mauvaise idée d'utiliser le + dans les modes d'ouverture de fichier.
    oups dsl erreur de frappe, c'est plutot ceci:
    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
     
     
    header('Content-Type: text/plain') ;
     
        $dom = new DOMDocument( ) ;
        $dom->load('f1.xml') ;
     
    $continents = $dom->getElementsByTagName('continents');
    foreach ($continents as $x){
     if ($x->getAttribute('id')=='0') {
     
     
        $buffer = '' ;
     
        for ( $i = 0 ; $i < $continents->childNodes->length ; $i++ ) {
            $buffer .= $dom->saveXML($continents->childNodes->item($i)) ;
        }}}
    $xs='psm/m3.txt';
    $fichier = fopen($xs, 'a+');
    fputs($fichier,$buffer);  
    fclose($fichier);
    mais ça regle tjr pas le probleme!!!!

  14. #14
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Vu que c'est tjs mieux avec du code correctement indenté et des variables au nom pertinent je le refais :

    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
    <?php
        header('Content-Type: text/plain') ;
     
        $dom = new DOMDocument( ) ;
        $dom->load('f1.xml') ;
     
        $buffer = '' ;
        foreach ( $dom->getElementsByTagName('continents') as $continent ) {
            if ( $continent->getAttribute('id') === '0' ) {
                foreach ( $continent->childNodes as $child ) {
                    $buffer .= $dom->saveXML($child) ;
                }
            }
        }
        echo $buffer ;
    ?>

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

Discussions similaires

  1. [DOM] Récupérer du code dans balises fichier XML
    Par Capripot dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 11/04/2008, 00h05
  2. [DOM] Récupérer le nom du premier noeud d'un fichier XML en PHP
    Par ePsymon dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 08/02/2008, 10h17
  3. [DOM] récupérer attribut dans variable d'un fichier XML
    Par skyangel20 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 19/06/2007, 09h43
  4. [DOM] Récupérer l'encodage d'un fichier xml en php5
    Par Rakken dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/11/2006, 15h31
  5. [DOM] récupérer le code dans une balise
    Par mavvv dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/03/2006, 09h27

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