XML - Classer dans l'ordre

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : XML - Classer dans l'ordre

Re: XML - Classer dans l'ordre

par J.F.bavl » 22 févr. 2013, 13:37

Je déborde de gratitude...

Merci.

A bientôt,

J.

Re: XML - Classer dans l'ordre

par damien_55 » 22 févr. 2013, 13:05

Comme hier :D

Admettons

Code : Tout sélectionner

<?xml version="1.0"?> <channel> <mal> <ma> <na>info</na> <ke> <k> <e>Audio</e> <e>francais</e> </k> </ke> </ma> </mal> <mal> <ma> <na>info2</na> <ke> <k> <e>cote archive</e> <e>K11129</e> </k> </ke> </ma> </mal> </channel>
<?php

$xml = simplexml_load_file('info.xml');

foreach ($xml ->mal as $value) {
$info= $value->ma->na;


foreach ($value ->ma->ke->k as $valeur) {
$e= $valeur->e[1];
echo $e.'<br>';
}
}
?>
Résultat

francais
K11129

Re: XML - Classer dans l'ordre

par J.F.bavl » 22 févr. 2013, 12:31

Salut, je reviens.

Est-il possible de récupérer seulement la deuxième balise <e> de chaque <k> ?


Image


Cela fonctionne avec les <k>, si j'entre le code comme cela:
foreach ($value ->ke->k[0]->e as $audio) {
$e= $audio;
echo $e.'<br/>';
}
foreach ($value ->ke->k[1]->e as $cote) {
$e1= $cote;
echo $e1.'<br/>';
}
Mais pas avec la dernière balise comme cela:
foreach ($value ->ke->k[0]->e[2] as $audio) {
$e= $audio;
echo $e.'<br/>';
}
foreach ($value ->ke->k[1]->e[2] as $cote) {
$e1= $cote;
echo $e1.'<br/>';
}
ps. ca vaut aussi si je met ->e[1], ou e[2] ou e[37], j'ai tout essayé...

Salutations,

J.

Re: XML - Classer dans l'ordre

par damien_55 » 21 févr. 2013, 17:37

De rien :D

Re: XML - Classer dans l'ordre

par Invité » 21 févr. 2013, 17:18

La grande classe, Merci Damien!

A plus

Re: XML - Classer dans l'ordre

par damien_55 » 21 févr. 2013, 17:04

avec simplexml_load_file
foreach ($xml ->mal as $value) {
$e=$value->ma->e;
echo $e.'<br>';
}
grosso modo, je ne sais pas la structure de ton xml. Mais le principe est de boucler sur la valeur ->e

Tu peux imbriquer les foreah les uns dans les autres.
Admettons

Code : Tout sélectionner

<?xml version="1.0"?> <channel> <mal> <ma> <na>info</na> <ke> <k> <e>100</e> <e>200</e> </k> </ke> </ma> </mal> <mal> <ma> <na>info2</na> <ke> <k> <e>200</e> <e>300</e> </k> </ke> </ma> </mal> </channel>
<?php

$xml = simplexml_load_file('info.xml');

foreach ($xml ->mal as $value) {
$info= $value->ma->na;
echo '<br>';
echo $info.'<br>';

foreach ($value ->ma->ke->k->e as $valeur) {
$e= $valeur;
echo $e.'<br>';
}
}
?>
Résultat

info
100
200

info2
200
300

Re: XML - Classer dans l'ordre

par J.F.bavl » 21 févr. 2013, 15:08

Merci à vous pour les réponses.

Il est vrai que la méthode sax est intéressante, bien qu'un peu complexe pour mon niveau. J'aimerai être bien sûr qu'il n'y a pas d'autre moyen d'y arriver plus simplement...car

J'ai réalisé, en me relisant, que mon problème peut difficilement être compris avec mon exemple de xml simplifié (mes excuses...)

Admettons:

Code : Tout sélectionner

<mal> <ma> <na>info</na> <ke> <k> <e>100</e> <e>200</e> </k> </ke> </ma> </mal> <mal> <ma> <na>info2</na> <ke> <k> <e>200</e> <e>300</e> </k> </ke> </ma> </mal>
Voila,

ce que j'aimerai :

Info
100
200

Info2
200
300

Ce que j'ai:

Info
Info2

100
200
300
400

J'imagine que c'est tout à fait réalisable avec sax, vu qu'il parcours le fichier dans le courant de l'eau...mais est-il possible de faire cela en simplexml?

En espérant avoir été assez clair.

Un grand merci d'avance.

J.

Re: XML - Classer dans l'ordre

par damien_55 » 21 févr. 2013, 01:20

avec simplexml_load_file
foreach ($xml ->mal as $value) {
$e=$value->ma->e;
echo $e.'<br>';
}
grosso modo, je ne sais pas la structure de ton xml. Mais le principe est de boucler sur la valeur ->e

Tu peux imbriquer les foreah les uns dans les autres.

Re: XML - Classer dans l'ordre

par dix2 » 20 févr. 2013, 11:41

avec la méthode sax, c'est une analyse "au fil de l'eau"

@+
dix2

XML - Classer dans l'ordre

par J.F.bavl » 20 févr. 2013, 11:23

Bonjour à toutes et à tous,

Dans le cadre de mon travail, je dois extraire les données d'un fichier xml très complexe et volumineux. J'ai commencé à parser à l'aide de simplexml, avec notamment des xpath un peu partout pour aller récupérer les données. Mais j'ai bien compris qu'il ne s'agit pas de la meilleur solution, étant donné que dans mon fichier xml, j'ai exactement 60273 balise <e> à extraire...sans parler des autres balises...bon.


Voici une version extrêmement simplifiée du xml, cela m'aidera certainement à comprendre le processus qu'il faut utiliser.

Quel est selon vous, le meilleur moyen d'extraire les balises <e>, dans l'ordre suivant (et ce sans utiliser de xpath...le fichier étant beaucoup trop long...) :

100
200

300
400

500
600

Code : Tout sélectionner

<mal> <ma> <e>100</e> <e>200</e> </ma> </mal> <mal> <ma> <e>300</e> <e>400</e> </ma> </mal> <mal> <ma> <e>500</e> <e>600</e> </ma> </mal>
Cette question peut paraître évidente au yeux de certains, j'ai fait les recherches nécessaire, mais la je bloque.
Si vous pouviez m'éclairer un peu, j'en serai vraiment très reconnaissant. Merci.

J.F.