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 :

[XML] Analyse XML et oubli de balises


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut [XML] Analyse XML et oubli de balises
    Bonjour,

    Je suis face à un petit souci et je n'arrive pas à trouver la solution...

    J'ai d'une part un fichier xml qui se présente de cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <result>
      <camping>
         <idSite>563</idSite>
         <address>1 place saint Génis</address>
         <address2 xsi:nil="1"/>
         <channel>
            <idChannel>6</idChannel>
            <name>FOIRE</name>
         </channel>
         ...
         ...
      </camping>
    </result>



    Et d'autre part un fichier php qui comprend la fonction qui s'occupe de parser ce 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    $reader = new XMLReader();
    $reader->open('context.xml') ;
     
    // début parseur
    while ( $reader->read() ) {
     
       switch ($reader->nodeType) {
     
          case (XMLREADER::ELEMENT):
     
    	switch( $reader->localName ) { 
     
    	   //Information camping		
    	   case "idSite" :
                  if( $inCamping ) {
    		$reader->read() ;
    		$campings[$nb_camping-1]['idSite'] = $reader->value ;
    	      }
                  break;
     
               case "address" :
    	      if( $inCamping ) {
    		if( $reader->isEmptyElement == false ) {
    		   $reader->read() ;
    		   if( $nodes[ $nbNode - 3 ] == "camping" ) {
    		     $campings[$nb_camping-1]['addressCamping'] = $reader->value ;
    		   }
    		}
    		else {
    		   $campings[$nb_camping-1]['addressCamping'] = '' ;
    		}
    	     }
    	     break;	
     
               ...
               ...
     
            }
          break;
       }
    }
    Mon souci est que le parseur n'arrive pas à rentrer dans le premier "case" ... la balise existe bien, j'ai bien repris exactement le même nom mais rien à faire ça ne veut pas.

    Par contre, il rentre normalement dans les autres "case" et fait les instructions demandées.

    J'ai déjà réalisé des parseurs auparavant et c'est bien la première fois qu'une telle chose m'arrive

    D'avance Merci.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 091
    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 091
    Points : 8 194
    Points
    8 194
    Billets dans le blog
    17
    Par défaut
    Mon souci est que le parseur n'arrive pas à rentrer dans le premier "case" ... la balise existe bien, j'ai bien repris exactement le même nom mais rien à faire ça ne veut pas.
    T'es sûr ? En reprenant ton code j'entre bien dans le case, par contre le if m'empêche d'aller plus loin.
    Que vaut $inCamping dans ton script ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Mon fichier XML se compose de 3 noeuds principaux : camping, tarifs, et products.
    Certaines balises sont présentes dans chacun des noeuds mais avec des valeurs différentes; le $inCamping permet de vérifier si la balise est présente dans tel ou tel noeud : il s'agit d'un simple boolean qui ici vaut true.

    Avec les données parsées, je fais des requêtes SQL qui vont renseigner ma bdd : le idSite est la clé primaire d'une de mes tables...
    Etant donné que le parseur ne peut entrer dans le case, idSite vaut donc NULL, ce qui me retourne une belle erreur quand le script veut faire la requête.

    Par contre ce que je n'arrive pas à saisir, c'est que cela marche quand les fichiers sont pris tels quels (entendre faire un copie/colle des bouts de code donnés) mais que cela foire quand je lance mon appli (entendre récupérer le flux xml via une réponse SOAP et parser en appelant la méthode correspondante...).

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 091
    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 091
    Points : 8 194
    Points
    8 194
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par nours30 Voir le message
    Par contre ce que je n'arrive pas à saisir, c'est que cela marche quand les fichiers sont pris tels quels (entendre faire un copie/colle des bouts de code donnés) mais que cela foire quand je lance mon appli (entendre récupérer le flux xml via une réponse SOAP et parser en appelant la méthode correspondante...).
    Et si tu récupères un flux XML SOAP dans un fichier, rien d'anormal ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    J'ai utilisé les deux méthodes.

    Méthode 1 :

    Je parse directement le flux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $request = $client->responseData ; //contient le flux xml
    $reader = XMLReader::XML($request); //création
    Méthode 2 :

    Je copie le flux xml dans un fichier que je parse ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $request = $client->responseData ;
    $destination_file = _SERVER['DOCUMENT_ROOT'].'/webservices/xml/context.xml' ;
    chmod($destination_file, 0777) ;
    if(!$source = fopen($destination_file, "w")) {
    	echo 'echec!' ;
    } else {
       fwrite($source, $request);
    }
     
    fclose($source);
     
    $reader = new XMLReader();
    $reader->open($_SERVER['DOCUMENT_ROOT'].'/webservices/xml/context.xml') ;
    Mais les deux méthodes donnent exactement le même résultat : le case "idSite" est complètement ignoré...

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 091
    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 091
    Points : 8 194
    Points
    8 194
    Billets dans le blog
    17
    Par défaut
    Donne un extrait minimaliste mais significatif et fonctionnel de context.xml, pareil pour ton script PHP.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    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
    salut,
    ton xml est peut être mal formé, peux tu ajouter un teste ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if( ! $reader->open($_SERVER['DOCUMENT_ROOT'].'/webservices/xml/context.xml') )
    {
      echo 'Le fichier xml n\'est pas valide';
    }
    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

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    J'ai ajouté le test mais rien ne s'est affiché, mon xml est donc bien formé..
    Je joins l'url du fichier xml que je crée avant de le parser : http://enroute-pour.com/webservices/xml/context.xml

    Une fois que le fichier est créé, j'appelle ma fonction php qui va s'occuper de parcourir le fichier et récupérer les informations que je veux (juste une partie parce que ma fonction de parsage est assez grande...):

    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
     
    //initialisation des données
    $nb_camping = 0 ;
    $nb_context = 0 ;
    $nb_product = 0 ;
    $nb_tariff_product = 0 ;
     
    $campings = array() ;
    $contexts = array() ;
    $products = array() ;
    $tarifs = array() ;
     
    $modele = array() ;
    $nodes = array() ;
    $nbNode = 0 ;
     
    $inCamping = false ;
    $inCustomerListInformation = false ;
    $inContext = false ;
    $inProduct = false ;
    $inTariffProduct = false ;
     
    //utile pour compter le nombre de supplement d'un tarif
    $payments = 0 ;
     
    //utile pour compter le nombre de photos d'un produit
    $pictures = 0 ;
    $inPictureProduit = false ;
     
    //utile pour compter le nombre de supplement d'un tarif
    $supplements = 0 ;
     
    //test s'il existe un fichier conditions de vente pour le camping
    $inSalesConditionCamping = false ;
     
    // début parseur
    while ( $reader->read() ) {
    	//historique des balises parsé
    	if( !$reader->hasValue ) {
    		$nodes[] = $reader->name ;
    		$nbNode++ ;
    	}
     
    	//compteur d'objet
    	if ($reader->name == "camping" && $reader->nodeType == XMLReader::ELEMENT) {
    		$nb_camping++ ;
    	}
     
    	if ($reader->name == "payment" && $reader->nodeType == XMLReader::ELEMENT) {
    		$payments++ ;
    	}
     
    	if ($reader->name == "context" && $reader->nodeType == XMLReader::ELEMENT) {
    		$nb_context++ ;
    	}
     
    	if ($reader->name == "product" && $reader->nodeType == XMLReader::ELEMENT) {
    		if( !$inContext ) {
    			$nb_product++ ;
    		}
    	}
     
    	if ($reader->name == "picture" && $reader->nodeType == XMLReader::ELEMENT) {
    		if( $reader->isEmptyElement == false ){
    			$pictures++ ;
    		}
    	}
     
    	if ($reader->name == "tariffProduct" && $reader->nodeType == XMLReader::ELEMENT) {
    		$nb_tariff_product++ ;
    	}
     
    	if ($reader->name == "supplement" && $reader->nodeType == XMLReader::ELEMENT) {
    		$supplements++ ;
    	}
     
    	//creation du modele
    	if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "camping") {
     
    		if( $inCamping ) {
    			$inCamping = false ;
    			//if( in_array( $campings[$nb_camping-1]['zipCodeCity'], $codePostaux ) ) {
    			$this->model_webcamp->addCamping( $campings[$nb_camping-1] ) ;
    			$idSiteEnabled[] = $campings[$nb_camping-1]['idSite'] ;
    			//}
     
    			$payments = 0 ;
     
    			$inSalesConditionCamping = false ;
    		}
    	}
     
    	if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "customerListInformation") {
    		$inCustomerListInformation = false ;
    	}
     
    	if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "context") {
     
    		if( $inContext ) {
    			$inContext = false ;
    			if( in_array( $contexts[$nb_context-1]['camping'], $idSiteEnabled ) ) {
    				$this->model_webcamp->addContext( $contexts[$nb_context-1] ) ;
     
    			}
    		}
     
    	}
     
    	if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "product") {
    		if( $inProduct ) {
    			$inProduct = false ;
    			$products[$nb_product-1]['picture'] = $pictures ;
    			if( in_array( $products[$nb_product-1]['idSite'], $idSiteEnabled ) ) {
    				$this->model_webcamp->addProduct( $products[$nb_product-1] ) ;
    			}
    			$pictures = 0 ;
    		}
    	}
     
    	if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "tariffProduct") {
    		if( $inTariffProduct ) {
    			$inTariffProduct = false ;
    			if( in_array( $tarifs[$nb_tariff_product-1]['idSite'], $idSiteEnabled ) ) {
    				$this->model_webcamp->addTariffProduct( $tarifs[$nb_tariff_product-1] ) ;
    			}
    			$supplements = 0 ;
     
    		}
    	}
     
    	if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "result") {
    		//afficheCampings($modele['camping'][0]);
    	}
     
    	switch ($reader->nodeType) {
     
    		case (XMLREADER::ELEMENT):
     
    			switch( $reader->name ) { 
     
     
    				//Information camping		
    				case "idSite" :
    				//echo '<script type="text/javascript">alert("bjr");</script>' ;
    					if( $inCamping ) {
    						$reader->read() ;
    						$campings[$nb_camping-1]['idSite'] = $reader->value ;
    					}
    					if( $inProduct){
    						$reader->read() ;
    						$products[$nb_product-1]['idSite'] = $reader->value ;
    					}
    					if( $inTariffProduct){
    						$reader->read() ;
    						$tarifs[$nb_tariff_product-1]['idSite'] = $reader->value ;
    					}
    					break;	
     
    				case "address" :
    					if( $inCamping ) {
    						if( $reader->isEmptyElement == false ) {
    							$reader->read() ;
    							if( $nodes[ $nbNode - 3 ] == "camping" ) {
    								$campings[$nb_camping-1]['addressCamping'] = $reader->value ;
    							}
    						}
    						else{
    							$campings[$nb_camping-1]['addressCamping'] = '' ;
    						}
    					}
    					break;		
     
    				case "address2" :
    					if( $inCamping ) {
    						if( $reader->isEmptyElement == false ) {
    							$reader->read() ;
    							if( $nodes[ $nbNode - 2 ] == "address" ) {
    								$campings[$nb_camping-1]['address2Camping'] = $reader->value ;
    							}
    						}
    						else {
    							$campings[$nb_camping-1]['address2Camping'] = '' ;
    						}
    					}
    					break;
     
    				case "city" :
    					if( $inCamping ) {
    						if( $reader->isEmptyElement == false ) {
    							$reader->read() ;
    							if( $nodes[ $nbNode - 3 ] == "name" || $nodes[ $nbNode - 2 ] == "address2" ) {
    								$campings[$nb_camping-1]['cityCamping'] = $reader->value ;
    							}
    							else{
    								$campings[$nb_camping-1]['customerListInformation']['city'] = $reader->value ;
    							}
    						}
    					}
    					break;
    ...
    ...
    Et toujours impossible de rentrer dans le case "idSite" ...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 343
    Points : 392
    Points
    392
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if( $inCamping ) {
    			$inCamping = false ;
    			//if( in_array( $campings[$nb_camping-1]['zipCodeCity'], $codePostaux ) ) {
    			....
    Est-ce que ça n'oblige pas $inCamping à être toujours faux?

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Non cela permet juste de n'entrer qu'une seule fois dans la condition, ceci afin d'éviter de remplir plusieurs fois la base de données avec les mêmes informations (et de générer un erreur de par la même).

  11. #11
    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
    Peux tu commenter ta condition et voir ce que ça donne ?
    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

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Aucun changement de ce côté..

    J'ai mis entre parenthèses le switch case pour le moment et je suis parti sur un test plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if($reader->name == "idSite" && $reader->nodeType == XMLReader::ELEMENT) {
    	echo "debut" ;
    	echo $reader->value;
    }
    elseif($reader->name == "idSite" && $reader->nodeType == XMLReader::END_ELEMENT) {
    	echo "fin" ;
    	echo $reader->value;
    }
    Et j'ai comme affichage sur mon écran "fin" : il voit l'élément de fin mais pas celui du début...

  13. #13
    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
    Peux tu essayer avec localName ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    if($reader->localName == "idSite" && $reader->nodeType == XMLReader::ELEMENT) {
    	echo "debut" ;
    	echo $reader->value;
    }
    elseif($reader->localName == "idSite" && $reader->nodeType == XMLReader::END_ELEMENT) {
    	echo "fin" ;
    	echo $reader->value;
    }
    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

  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
    t'es obliger de le parser en stream ?

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Thes32 Voir le message
    Peux tu essayer avec localName ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    if($reader->localName == "idSite" && $reader->nodeType == XMLReader::ELEMENT) {
    	echo "debut" ;
    	echo $reader->value;
    }
    elseif($reader->localName == "idSite" && $reader->nodeType == XMLReader::END_ELEMENT) {
    	echo "fin" ;
    	echo $reader->value;
    }
    Toujours le même affichage : juste le "fin" ..

    Citation Envoyé par stealth35 Voir le message
    t'es obliger de le parser en stream ?
    Tu veux dire abandonner XMLReader et passer par SimpleXML ?

  16. #16
    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
    Peux tu afficher leurs valeurs ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $reader->localName;
    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

  17. #17
    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
    Citation Envoyé par nours30 Voir le message
    Toujours le même affichage : juste le "fin" ..



    Tu veux dire abandonner XMLReader et passer par SimpleXML ?
    oui

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Cela m'affiche "fin idSite".

    En regardant les balises parcourues avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //historique des balises parsées
    if( !$reader->hasValue ) {
    	$nodes[] = $reader->name ;
    	$nbNode++ ;
    	print_r($nodes);
    }
    j'obtiens ce tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Array
    (
        [0] => result
        [1] => camping
        [2] => idSite
        [3] => address
        [4] => address
        [5] => address2
        ...
    )
    alors que normalement je devrais avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Array
    (
        [0] => result
        [1] => camping
        [2] => idSite
        [3] => idSite
        [4] => address
        [5] => address
        [6] => address2
        ...
    )
    Lors du parcours, il oublie une balise (et en regardant dans les profondeurs du tableau, je m'aperçois qu'il fait également ça avec d'autres balises...).


    En ce qui concerne l'option de passer par SimpleXML, je la réserve pour un peu plus tard si je ne trouve pas de solutions...

  19. #19
    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
    vu ce que tu fais avec ton XML simplexml sera plus facil, et pas beson de condition et tout, tu peux direct compter le nombre de noeud, et les rapatrier sans parser le tout le xml

    EDIT : voir DOMDocument le xpath de SimpleXML permet uniquement de faire des requêtes et rapparier les noeud, alors qu'avec le DOMXpath la fonction evaluate te permet de faire des count()

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bon finalement, après l'appel d'un technicien de la plateforme, il s'est avéré que le problème venait de leur côté...
    Par contre ils n'ont pas pu me renseigner précisément sur la nature du problème (une sombre histoire de migration en 64 bits qui aurait mal tournée..) !

    Et donc après tout ceci, mon parsage remarche parfaitement plus de souci de ce côté

    En tout cas merci de votre aide et du temps passé

    PS : pour ce qui est de passer à SimpleXML pourquoi pas? Disons que j'ai plus l'habitude de travailler avec des fichiers volumineux et XMLReader.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/05/2006, 20h42
  2. [XML] ChildNodes: différencier si balise vide ou inexistante
    Par MiJack dans le forum Composants VCL
    Réponses: 4
    Dernier message: 05/04/2006, 14h25
  3. [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
  4. [XSLT] XML->XML conversion attributs en balises
    Par ¤ Actarus ¤ dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/07/2005, 09h51
  5. XML et XSL avec balises prefixees
    Par mamouth2005 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 07/06/2005, 14h36

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