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] parcourir un fichier xml et extraire des élements pour traitement


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut [SimpleXML] parcourir un fichier xml et extraire des élements pour traitement
    Bonjour, je rencontre quelques difficultés pour parcourir un fichier XML et effectuer durant le parcourt l’exclusion de doublon ainsi que l'identification du nœud courant.

    En faites je dois lire un fichier xml local et analyser dans la base de données si les éléments existe pour ensuite les insérer (jusque la rien de compliqué)
    LE problème c'est au moment de la lecture, je dois faire quelques travaux tel qu'éliminé les doublons ou encore identifié sur quel élément je me trouve.

    Le fichier contient plusieurs agences ainsi que plusieurs propriétés dans chaque agences
    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
     
    <monxml>
         <agency code="2AV02">
            <codeagence>650</codeagence>
            <properties>
                <property id="10">
                <propertyuuid>6C83FBAFBB23</propertyuuid>
                <location>
                    <address1></address1>
                    <address2></address2>
                    <insee>75116</insee>
                    <city><![CDATA[Paris 16e]]></city>
                    <province><![CDATA[Paris]]></province>
                    <postalcode>75016</postalcode>
                </location>
                </property>
                <property id="10">
                <propertyuuid>6C83FBAFBB23</propertyuuid>
                <location>
                    <address1></address1>
                    <address2></address2>
                    <insee>75116</insee>
                    <city><![CDATA[Paris 16e]]></city>
                    <province><![CDATA[Paris]]></province>
                    <postalcode>75016</postalcode>
                </location>
                </property>
                <property id="15">
                <propertyuuid>6CERTAFBB23</propertyuuid>
                <location>
                    <address1></address1>
                    <address2></address2>
                    <insee>75116</insee>
                    <city><![CDATA[Paris 8e]]></city>
                    <province><![CDATA[Paris]]></province>
                    <postalcode>75018</postalcode>
                </location>
                </property>
            </properties>
        </agency>
        <agency code="9AV05">
            <codeagence>701</codeagence>
            <properties>
                <property id="A1041451">
                    <propertyuuid>6C83FYTRE23</propertyuuid>
                    <location>
                        <address1></address1>
                        <address2></address2>
                        <insee>75116</insee>
                        <city><![CDATA[Paris 16e]]></city>
                        <province><![CDATA[Paris]]></province>
                        <postalcode>75016</postalcode>
                    </location>
                </property>
            </properties>
        </agency>
    </monxml>
    Voici le script que j'ai tester :
    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 = new SimpleXMLElement('test.xml',0, TRUE);
        $t = '';
        foreach ($xml->agency as $key){
            if($key['code'] == '2AV02'){
                $t.= 'agency : '.$key['code'].'<br />'.'codeagence: '.$key->codeagence.'<br /><h3>Propriétés</h3>';
                foreach($xml->agency->properties->property as $prop){
                    //$t.= $prop['id'].'<br>';
                    $t .= $prop->propertyuuid.'<br>';
                }
            }
            //
        }
        print $t;
    Forcément ici il me retourne les éléments de l'agence comportant le numéro 2AV02 mais c'est du dur, peut on identifier l'agence en cours de traitement et effectuer la deuxième boucle pour bien travailler sur les propriétés de cette agence et bien entendu supprimer les doublons de propriétés car de temps en temps j'ai deux identifiant les même qui ce suivent mais impossible de l'éjecter.
    Dois je me pencher sur SimpleXMLIterator pour savoir quel sera l'élément suivant pour l'éliminé du traitement ?
    Le xml est très succinct ici mais en vérité il est énorme
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  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 : 47
    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,

    Vu les travaux à faire, oublies simplexml(), utilises directement DOMDocument.
    Ensuite je ferais simple pour les doublons : j'aurais laissé ce contrôle à la base de données. Sois l'ajout réussi soit il est rejeté. Si au préalable tu t'es bien assuré de la validité de ton enregistrement, tu peux raisonnablement penser que c'est à cause d'un doublon.
    Après pour tes extractions, regardes du côté de DOMXPath

  3. #3
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Bonjour,
    Est ce le même principe que simpleXML ?
    Je n'ai jamais utilisé DOMDocument, concernant mon fichier je suppose que je le charge avec load (http://fr.php.net/manual/fr/domdocument.load.php).
    Ensuite je peux faire une structure descendante avec des boucles pour retourner les résultats.
    Pour les doublons je les traiterai directement avec la base de données ce sera plus simple (comme indiquez dans votre message).
    J'ai pas mal de check à faire surtout lors du premier passage qui va insérer pratiquement tout le fichier (vu que c'est vide)
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  4. #4
    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 : 47
    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
    Bonjour,

    Citation Envoyé par gtraxx Voir le message
    Est ce le même principe que simpleXML ?
    Oui c'est exactement la même librairie qui est derrière. Donc pas de différence côté perfs.
    DOMDocument c'est l'artillerie lourde alors que SimpleXML c'est pour l'apéritif.

  5. #5
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Ok j'ai commencé à tester mais pourriez vous m'expliquer afin que je m'y retrouve j'ai essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $dom = new DOMDocument();
            $this->parseXmlData($dom);
            $agencies = $dom->getElementsByTagName('agency');
            foreach ($agencies as $agency) {
                //echo $agency->nodeValue;
                if ($agency->hasAttribute("code")) {
                    echo $agency->getElementsByTagName('agencyname')->nodeValue. " - " . $agency->getAttribute("code").'<br />';
                }
            }
    Je tente de faire comme décrit ci-dessus (juste retourner pas encore les checks)
    Mais pour l'instant je tente de trouver ma méthode pour bien comprendre son fonctionnement.
    Par exemple je n'arrive pas à partir de la balise "agency" retourner son attribut "code" et continuer à retourner les élements et sous éléments comme je l'entend.
    nodeValue me retourne tout le xml -_-, chaque élément doit être manipuler piur que je puisse réaliser mes checks DB par la suite (le test de l'affichage c'est le commencement)
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  6. #6
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Bonjour j'ai commencé à comprendre mais j'ai une question suppl.
    Mon fichier est énorme et les requêtes à effectuer son également assez conséquente, j'ai tester en local sur le dit fichier pesant plus de 80 MO et j'ai fais pas mal de test pour ensuite planter le système avec une surcharge de mémoire -_-
    Je vous montre un extrait et la partie qui plante qui étais la juste pour tester
    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
     
    foreach ($agencies as $agency) {
                if ($agency->hasAttribute("code")) {
                    $t .= '<div>';
                    $t .= $agency->getAttribute('code').'<br>';
                    $t .= $agency->getElementsByTagName('codeagence')->item(0)->nodeValue.'<br>';
                    foreach($agency->getElementsByTagName('property') as $prop){
                        $t .= '<div>';
                        $t .= $prop->getElementsByTagName('propertyuuid')->item(0)->nodeValue.'<br>';
     
                        foreach($prop->getElementsByTagName('propertyphotos') as $photo){
                            $tof[]= $photo->nodeValue;
                        }
                        $t .= implode(',',$tof);
                        $t .= '</div>';
                    }
                    $t .= '</div>';
                }
            }
            print $t;
    La partie incriminé est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($prop->getElementsByTagName('propertyphotos') as $photo){
                            $tof[]= $photo->nodeValue;
                        }
                        $t .= implode(',',$tof);
    Cette partie est ajouté dans le XML pour vous donner une vue :
    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
     
    <monxml>
         <agency code="2AV02">
            <codeagence>650</codeagence>
            <properties>
                <property id="10">
                <propertyuuid>6C83FBAFBB23</propertyuuid>
                <location>
                    <address1></address1>
                    <address2></address2>
                    <insee>75116</insee>
                    <city><![CDATA[Paris 16e]]></city>
                    <province><![CDATA[Paris]]></province>
                    <postalcode>75016</postalcode>
                </location>
                </property>
                <property id="10">
                <propertyuuid>6C83FBAFBB23</propertyuuid>
                <location>
                    <address1></address1>
                    <address2></address2>
                    <insee>75116</insee>
                    <city><![CDATA[Paris 16e]]></city>
                    <province><![CDATA[Paris]]></province>
                    <postalcode>75016</postalcode>
                </location>
                  <propertyphotos>
    	         <photo caption="">033-1AV01-10-1.jpg</photo>
                     <photo caption="">033-1AV01-10-1.jpg</photo>
                     <photo caption="">033-1AV01-10-1.jpg</photo>
                     <photo caption="">033-1AV01-10-1.jpg</photo>
                     <photo caption="">033-1AV01-10-1.jpg</photo>
                  </propertyphotos>
                </property>
                <property id="15">
                <propertyuuid>6CERTAFBB23</propertyuuid>
                <location>
                    <address1></address1>
                    <address2></address2>
                    <insee>75116</insee>
                    <city><![CDATA[Paris 8e]]></city>
                    <province><![CDATA[Paris]]></province>
                    <postalcode>75018</postalcode>
                </location>
                  <propertyphotos>
    	         <photo caption="">033-1AV01-10-1.jpg</photo>
                     <photo caption="">033-1AV01-10-1.jpg</photo>
                     <photo caption="">033-1AV01-10-1.jpg</photo>
                     <photo caption="">033-1AV01-10-1.jpg</photo>
                     <photo caption="">033-1AV01-10-1.jpg</photo>
                  </propertyphotos>
                </property>
            </properties>
        </agency>
        <agency code="9AV05">
            <codeagence>701</codeagence>
            <properties>
                <property id="A1041451">
                    <propertyuuid>6C83FYTRE23</propertyuuid>
                    <location>
                        <address1></address1>
                        <address2></address2>
                        <insee>75116</insee>
                        <city><![CDATA[Paris 16e]]></city>
                        <province><![CDATA[Paris]]></province>
                        <postalcode>75016</postalcode>
                    </location>
                  <propertyphotos>
    	         <photo caption="">033-1AV01-10-1.jpg</photo>
                     <photo caption="">033-1AV01-10-1.jpg</photo>
                     <photo caption="">033-1AV01-10-1.jpg</photo>
                     <photo caption="">033-1AV01-10-1.jpg</photo>
                     <photo caption="">033-1AV01-10-1.jpg</photo>
                  </propertyphotos>
                </property>
            </properties>
        </agency>
    </monxml>
    Je fais peut être le foreach au mauvais nœud ou alors les fonctions utilisé ne sont pas optimisé, bref je pensais qu'il serai plus solide que sa -_-
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  7. #7
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    voila j'ai changer de méthode pour parser plus facilement et surtout plus rapidement :
    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
     
    $i = 0;
    $xml = new XMLReader();
    $xml->open($this->loadXmldataFile(), "UTF-8");
    $ag = '';
    while($xml->read()){
                    if ($xml->nodeType == XMLREADER::ELEMENT && $xml->localName == "agency") {
                        $i++;
                        $v = $xml->expand();
                        //L'agence
                        //$ag .= $i.'<br>';
                        $code = parent::v_agency($xml->getAttribute('code'));
                        if($code['id_origin_ag']  != ''){
                            $ag .=  $xml->getAttribute('code').'<br>';
                            $v = new SimpleXMLElement('<agency>'.$xml->readInnerXML().'</agency>',0, false);
                            //print $v->attributes('code');
                            if ($v->codeagence) {
                                $ag .=  $v->codeagence.'<br/>';
                            }
                            //Les propriétés
                            foreach($v->properties->property as $prop){
                                $ag .=  $prop->propertyuuid.'<br/>';
                                if($prop->propertyphotos->count() != 0){
                                    //Les photos de la propriétée
                                    foreach($prop->propertyphotos->children() as $photo){
                                       //print $photo.'<br>';
                                       $photo_url = parse_url($photo);
                                       $photo_name = explode('/',$photo_url['path']);
                                       //$tabs_photo[]= $photo_name[5];
                                       //print $photo_name[5].'<br>';
                                        $tabs_photo[]= $photo_name[5];
                                    }
                                    $ag .= implode(',',$tabs_photo).'<br>';
                                }
                            }
    }
    }
    La méthode fonctionne bien sauf pour cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $ag .= implode(',',$tabs_photo).'<br>';
    Il retourne systématiquement :
    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 126337069 bytes)
    C'est peut être la syntaxe employé qui fait en sorte que je consomme plus de mémoire ? pourtant la méthode xmlreader jumelé avec simplexml fait des miracles -_-
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  8. #8
    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 : 47
    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
    Est ce que tu as essayé après avoir alloué plus de mémoire à php ?

  9. #9
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Oui via le htaccess mais il en réclame encore plus -_-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php_value memory_limit 128M
    J'ai même essayé bien plus sans succès donc je me demande si ce n'est pas le implode qui pose vraiment problème et le remplacer par autre chose.
    En gros je dois simplement séparer les images par une virgule et le implode semblais tout à fait approprié (sauf dans ce cas)
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  10. #10
    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 : 47
    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
    Tu dis que ton fichier fait 80 Mo ! Donc 128 Mo ça me parait léger pour y faire face.
    Est ce que tu as essayé de scinder ton fichier ne serait-ce qu'en deux pour voir si tu atteint toujours la limite.

  11. #11
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Voila j'ai scinder le fichier pour avoir plus ou moins 29MO mais j'ai toujours une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 126337069 bytes)
    En gros je me suis basé la dessus : http://dsampaolo.com/blog/42-parser-...xmlreader.html
    Donc pour utiliser la lecture du xml en mode flux et ce séquentiellement comme décrit dans l'article.
    J'avais déjà utiliser cette méthode mais sur de plus petit fichier mais pour un XML aussi gros difficile de savoir quoi faire
    Sinon il faut découper le fichier, pourquoi pas en scindant par agence (voir balise xml)
    Car il y a plus ou moins 300 agences mais plus ou moins entre 20 et 150 biens par agences (sa en fait un bon paquet)
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  12. #12
    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
    Si ton fichier est gros il faut le lire en stream via SAX, rien n'empeche d'utiliser ensuite SimpleXMl pour les noeuds

    http://php.net/manual/fr/book.xml.php

  13. #13
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Jumelé avec ceci par exemple ?

    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
     
    $file = "data.xml";
    $xml_parser = xml_parser_create();
     
    if (!($fp = fopen($file, "r"))) {
        die("could not open XML input");
    }
     
    $data = fread($fp, filesize($file));
    fclose($fp);
     
    //Je place mon script ici ??????
     
     
    xml_parse_into_struct($xml_parser, $data, $vals, $index);
    xml_parser_free($xml_parser);
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  14. #14
    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
    non la tu ne le lit pas en stream, puisque ça revient a faire un file_get_content ton fopen + filesize

  15. #15
    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 : 47
    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
    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
    $xml = xml_parser_create();
    xml_parser_set_option(...);
    xml_set_element_handler($xml, 'startElement', 'endElement');
    xml_set_character_data_handler($xml, 'contentElement');
     
    $fp = fopen('data.xml', 'rb') or die('Error opening file');
    while ($data = fread($fp, 8192)) {
      xml_parse($xml, $data, feof($fp)) or die('Error parsing file');
    }       
    fclose($fp);
     
    xml_parser_free($xml);

  16. #16
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    C'étais pour voir si je regardais au bon endroit mais j'avoue que la je suis larguer.
    Je ne vois pas trop pour la lecture en stream ....
    Je tente de le jumelé avec ma fonction ci-dessus mais la je ne vois pas trop, je dois créer alors mon propre parser avec xml_parser_create ?
    N'est ce pas possible de joindre mon système avec une lecture en stream ?
    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 = xml_parser_create();
                xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, false);
                //Dois je créer une fonction spécifique de début et de fin ?
    xml_set_element_handler($xml, 'start', 'end');
                xml_set_character_data_handler($xml, 'contentElement');
     
                $fp = fopen($this->loadXmldataFile(), 'rb') or die('Error opening file');
                while ($data = fread($fp, 8192)) {
                    xml_parse($xml, $data, feof($fp)) or die('Error parsing file');
    //Placer l'execution de lecture ici ?
                }
                fclose($fp);
     
                xml_parser_free($xml);
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

Discussions similaires

  1. Lire contenu fichier XML et extraire des élements
    Par rhum_ain dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 27/06/2018, 10h01
  2. parcourir un fichier XML pour recuperer des information
    Par samerkouta dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 05/10/2009, 11h02
  3. [SimpleXML] Charger un fichier XML comprenant des espaces de nom
    Par nadiaflamingenierie dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 16/01/2008, 10h30
  4. [débutant]Parcourir un fichier XML
    Par Wis dans le forum ASP
    Réponses: 2
    Dernier message: 26/09/2005, 10h04
  5. [XML] validation de fichier XML:l'ordre des balises compte ?
    Par longbeach dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 04/09/2005, 18h53

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