Bonjour,
Tout d'abord excusez moi si je me suis trompé de section j'ai eu du mal a identifier le lieu exacte ou poser ma question.
Je débute en programmation, tout particulièrement en manipulation de fichier xml.
Mon besoin est assez simple je pense et les aides que je trouve me laisse dans l'embarras et cible des utilisations trop complexe, bref je m y perd.
Voila ce que je veux:
Récuperer deux données dans un fichier xml pour ensuite les exploiter en php/mysql, l'exploitation ca je sais faire mais la récupération via parser me pose problème.
Structure du fichier xml:
C'est le motif du fichier xml parfois il change légérement.
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <Song FileName="Atomic Cat - Viva la Revolution!.mp3" FileSize="3931890" TagDate="704012053"> <Infos SongLength="10810368" Date="704012053" /> <BPM Bpm="18899" Phase="1559" /> <FAME IsScanned="1" Volume="6065" /> <Automix MixType="3" TempoStart="77155" TempoEnd="9753443" CutStart="1984" CutEnd="10490592" FadeStart="16896" FadeEnd="10643968" /> </Song>
Je veux faire uniquement une exploitation local pour mon petit projet.
J'ai besoin seulement de récupérer:
Atomic Cat - Viva la Revolution!.mp3
18899
Soit le titre du morceau (Filename) et son BPM (Bpm).
Ces données doivent juste etre stocké dans deux variable tableaux mais indexé de facon a ce que a chaque numéro d index j'ai bien le bon BPM pour le bon titre.
J'ai fais un cod edéja qui donne des résultats:
Mais comme on peut le voir je récupére de facon distincte le titre et le BPM ce qui fait que dès que j'ai un titre dans le XML sans BPM je suis planté et ca décale tout.
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 <?php set_time_limit(0); $file = "test.xml"; $contenu = fread(fopen($file, "r"), filesize($file)); preg_match_all("|<Song FileName=\"(.*)\" FileSize=\"(.*)\" TagDate=\"(.*)\">|U", $contenu, $titre); preg_match_all("|<BPM Bpm=\"(.*)\"|U", $contenu, $bpm); // <BPM Bpm=\ Phase=\"(.*)\" BeatPhase=\"(.*)\" />|U $nbrtrack=count($titre[1]); echo '<b>Nbr de titre analysé(s) :'.$nbrtrack.'<br/>'; /* le \d signifie n'importe quelle décimale */ /* le .* signifie n'importe quel caractère '.' présent de 0 à n fois '*' */ for($j=0;$j<count($titre[1]);$j++){ echo $titre[1][$j].'<br/>'; echo $bpm[1][$j].'<br/>'; } ?>
J'aimerai juste faire la récupération en un temps dans la fonction preg_match_all ou utiliser une autre méthode pour arriver a mes fin.
J'utilise easyphp
php version 4.3.10
Merci pour votre aide éventuel !
Partager