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

Langage PHP Discussion :

[Système] Transfert XML >> PHP (Fichier xml local)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par défaut [Système] Transfert XML >> PHP (Fichier xml local)
    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:
    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>
    C'est le motif du fichier xml parfois il change légérement.
    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:
    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/>';
        }
     
    ?>
    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.

    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 !

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    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
    13
    14
    15
    16
    17
    <?php
    set_time_limit(0);
     
    $file = "song.xml";
    $contenu = fread(fopen($file, "r"), filesize($file));
    $nbtitre = preg_match_all('|<Song FileName="(.*)" FileSize=".*" TagDate=".*">.*<BPM Bpm="(.*)"|sU', $contenu, $titre, PREG_SET_ORDER);
    echo '<b>Nbr de titre analysé(s) :'.$nbtitre.'<br/>';
     
    # Construction du tableau
    $association = array();
    if ($nbtitre > 0) {
        foreach ($titre as $t) {
            $association[$t[2]] = $t[1];
        }
    }
    print_r($association);
    ?>
    J'ai volontairement regroupé les deux expressions régulières pour fiabilité et praticité. (Dommage sous PHP 5 avec SimpleXML, ça aurait été un jeu d'enfant).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par défaut
    Merci pour cette réponse et c'est vrai que mon problème se trouvait dans la formulation d une expression régulière, je vais étudié cette solution et vous tenir au courant du résultat !
    Et je pense que le regroupement des deux expressions (ce que j'ai essayé hier en vain) est la solution a mon problème (tout au moins logiquement).

    Premier test: le résultat est propre, petit extrait:

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Nbr de titre analysé(s) :1020
    Array ( [20835] => Joris Delacroix - My FL Is Crazy.mp3 [22814] => Metricks - Waterfoam.mp3 [20354] => Jeff Hil0 - Phat Hour (Main Mix).mp3 [20044] => Vallesca - Hi Energy.mp3 [20352] => Anthony De Maria - Veillance.mp3 [20377] => Sonikadivision - Speed Tribal Remix.mp3 [21752] => Davidaubrun - Egoisme du Conformisme.mp3 [20045] => Transynth - Detuned.mp3 [20811] => DJ Magamed - Unknow (Energy Original Tech House Version Mix).mp3 [19895] => Sunburnt Octopus - Lost And Found.mp3 [19314] => Figure - Circuit Override.mp3 [21339] => ArcanaCrux - Composite in Mirror.mp3 [19599] => Anthony De Maria - Phencyclidine.mp3 [19896] => Wikoo - Black Away.mp3 [21162] => Vera - Club Mix.mp3 [21170] => Loo Dove - First Night.mp3 [19315] => Muttonheads - Demon On Da Way (Can Blaster Rmx).mp3.mp3 [21000] => Malcom Charles - Dancin N Singin.mp3 [16409] => DJ Lucifer - Blow That Door (Original Mix).mp3

    Je dois encore me pencher sur ces résultats en particulier j'ai l impression qu'il s agit d une bijection alors que certains titres ont le même BPM donc certains doivent ne pas apparaitre, j'étudie ca plus en détail et je reviens pour une conclusion.

    Je confirme j'ai rajouté ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $verif=count($association);
     echo '<br/><br/>'.$verif;
    Ce qui me donne:
    Nombre de titre analysé: 1020
    Nombre d élément dans $association: 306
    ...

    Tous les titres aux meme BPM sont apparement écrasé et seul le dernier reste.

    Voici un extrait significatif (avec les différents motifs qui peuvent apparaitre et plusieurs sons au meme BPM si quelqun veut m aider en testant).

    Code XML : 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
     <Song FileName="Jeff Hil0 ft Cadatta - Tri.mp3" FileSize="7700480" TagDate="703112213">
      <Infos SongLength="14147712" />
      <BPM Bpm="20835" Phase="5954" />
      <FAME IsScanned="1" Volume="5464" />
      <Automix MixType="3" TempoStart="89294" TempoEnd="13423694" CutStart="89376" CutEnd="14069344" FadeStart="91136" FadeEnd="14091776" />
     </Song>
     <Song FileName="Metricks - Waterfoam.mp3" FileSize="5865472" TagDate="703112132">
      <Infos SongLength="12928896" />
      <BPM Bpm="20835" Phase="8436" />
      <FAME IsScanned="1" Volume="6799" />
      <Automix MixType="3" TempoStart="1377276" TempoEnd="11232924" CutStart="1376992" CutEnd="12100032" FadeStart="861184" FadeEnd="12333056" />
     </Song>
     <Song FileName="Machiavelique Underground ft U115  - Exclusive for u115 over blog com.mp3" FileSize="65801730">
      <Infos Date="704260340" />
     </Song>
     <Song FileName="Atomic Cat - Red Alert.mp3" FileSize="10059776" TagDate="703112032">
      <Infos SongLength="18481536" />
      <BPM Bpm="20354" Phase="2058" />
      <FAME IsScanned="1" Volume="9107" />
      <Automix MixType="3" TempoStart="2607370" TempoEnd="15308266" CutStart="541344" CutEnd="17549696" FadeStart="185856" FadeEnd="18240000" />
     </Song>
     <Song FileName="Danylo - Here Comes The Sound (Jazzy Mix).mp3" FileSize="5931008" TagDate="703111902">
      <Infos SongLength="10895616" />
      <BPM Bpm="20044" Phase="3512" BeatPhase="2" />
      <FAME IsScanned="1" Volume="3845" />
      <Automix MixType="1" CutStart="3360" CutEnd="9835264" FadeStart="16896" FadeEnd="10254336" />
     </Song>
     <Song FileName="Cadatta - Tri (Jeff Hil0 rmx).mp3" FileSize="7700480" TagDate="703111901">
      <Infos SongLength="14147712" />
      <BPM Bpm="20835" Phase="5954" />
      <FAME IsScanned="1" Volume="5464" />
      <Automix MixType="3" TempoStart="89294" TempoEnd="13423694" CutStart="89376" CutEnd="14069344" FadeStart="91136" FadeEnd="14091776" />
     </Song>
     <Song FileName="AdamZ ft Electric Boogie - The AdamZ Project.mp3" FileSize="3047424" TagDate="703111858">
      <Infos SongLength="8398080" />
      <BPM Bpm="20352" Phase="17664" BeatPhase="1" />
      <FAME IsScanned="1" Volume="7317" />
      <Automix MixType="1" CutStart="414464" CutEnd="8118240" FadeStart="22528" FadeEnd="8173568" />
     </Song>
     <Song FileName="Sonikadivision - Speed Tribal Remix.mp3" FileSize="5472256" TagDate="703111851">
      <Infos SongLength="15078528" Date="703212133" />
      <BPM Bpm="20377" Phase="18006" BeatPhase="1" />
      <FAME IsScanned="1" Volume="6554" />
      <Automix MixType="3" TempoStart="690447" TempoEnd="13079663" CutStart="690656" CutEnd="13711264" FadeStart="23040" FadeEnd="15037952" />
     </Song>
     <Song FileName="Davidaubrun - Egoisme du Conformisme.mp3" FileSize="10911768" TagDate="704141619">
      <Infos SongLength="20048256" Date="704141619" />
      <BPM Bpm="21752" BeatPhase="1" />
      <FAME IsScanned="1" Volume="2972" />
      <Automix CutStart="105248" FadeStart="16896" FadeEnd="20014080" />
     </Song>
     <Song FileName="Muttonheads - Demon On Da Way (Stephane V Rmx).mp3" FileSize="6586418" TagDate="703112043">
      <Infos SongLength="12098304" />
      <BPM Bpm="20045" Phase="1011" />
      <FAME IsScanned="1" Volume="6502" />
      <Automix MixType="1" TempoStart="1011" CutStart="992" CutEnd="11594208" FadeStart="16896" FadeEnd="11919360" />
     </Song>
     <Song FileName="DJ Magamed - Unknow (Energy Original Tech House Version Mix).mp3" FileSize="5439539" TagDate="704172013">
      <Infos SongLength="10973952" />
      <BPM Bpm="20811" Phase="1040" />
      <FAME IsScanned="1" Volume="7904" />
      <Automix MixType="3" TempoStart="1040" TempoEnd="8658416" CutStart="960" CutEnd="9303200" FadeStart="16896" FadeEnd="10925056" />
     </Song>
     <Song FileName="Carbo - Fly To Ibiza.mp3" FileSize="8061014" TagDate="703112033">
      <Infos SongLength="14804352" />
      <BPM Bpm="19895" Phase="1704" />
      <FAME IsScanned="1" Volume="3181" />
      <Automix MixType="3" TempoStart="1704" TempoEnd="13689464" CutStart="1824" CutEnd="14399744" FadeStart="16896" FadeEnd="14424576" />
     </Song>

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par défaut
    Je repose donc le problème avec le code précédent qui a mon avis via une petite adapation va convenir:

    Donc voici le code avec ma petit vérification en plus:

    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
    <?php
    set_time_limit(0);
     
    $file = "test1.xml";
    $contenu = fread(fopen($file, "r"), filesize($file));
    $nbtitre = preg_match_all('|<Song FileName="(.*)" FileSize=".*" TagDate=".*">.*<BPM Bpm="(.*)"|sU', $contenu, $titre, PREG_SET_ORDER);
    echo '<b>Nbr de titre analysé(s) :'.$nbtitre.'<br/>';
      # Construction du tableau 
      $association = array();
      if ($nbtitre > 0)
      {
      foreach ($titre as $t)
      {  $association[$t[2]] = $t[1]; } }
     print_r($association);
     $verif=count($association);
     echo '<br/><br/>'.$verif;
    ?>
    Voici la réponse obtenu avec le petit fichier xml mis au dessus qui a été fait de facon a mettre a l'épreuve le code sur toute les difficultés (même BPM, non présence parfois des sous balises, différence dans les balises):

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Nbr de titre analysé(s) :11
    Array ( [20835] => Cadatta - Tri (Jeff Hil0 rmx).mp3 [20354] => Machiavelique Underground ft U115 - Exclusive for u115 over blog com.mp3 [20044] => Danylo - Here Comes The Sound (Jazzy Mix).mp3 [20352] => AdamZ ft Electric Boogie - The AdamZ Project.mp3 [20377] => Sonikadivision - Speed Tribal Remix.mp3 [21752] => Davidaubrun - Egoisme du Conformisme.mp3 [20045] => Muttonheads - Demon On Da Way (Stephane V Rmx).mp3 [20811] => DJ Magamed - Unknow (Energy Original Tech House Version Mix).mp3 [19895] => Carbo - Fly To Ibiza.mp3 )
    
    9

    On voit donc que:

    Pour les titres de meme BPM au nombre de trois:
    20835
    Jeff Hil0 ft Cadatta - Tri.mp3
    Metricks - Waterfoam.mp3
    Cadatta - Tri (Jeff Hil0 rmx)

    Nous avons dans le résultat:
    [20835] => Cadatta - Tri (Jeff Hil0 rmx).mp3 OK

    C'est à dire la dernière occurence du titre au meme BPM.
    Cela dit ce code a au moins le mérite de me dresser un liste de BPM avec un morc eau uniquement par BPM ;-) !

    Je pense toutefois que si l'effet unique avait été sur les titres et non les BPM ca aurait été génial ! et m'aurait pas virer des résultats au contraire ca m'aurait supprimer les doubles dans les titres (et non dans les BPM.)

    Encore un petit soucis poru la balise du XML:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <Song FileName="Machiavelique Underground ft U115  - Exclusive for u115 over blog com.mp3" FileSize="65801730">
      <Infos Date="704260340" />
     </Song>
    qui elle ne contient pas d info sur le BPM. cependant pour ce problème je pense qu'il faudrait rajouter un if peut etre mais ce problème m importe moins.


    Reste plus qu'a enlever cette bijection!!!!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par défaut
    Bon cool lol mon auto discution m'a permi de résoudre je pense le premier gros problème !
    Comme je le disais faire une bijection en partant du titre et non du BPM aurait été extra j'ai donc tout simplement changé le code ici:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $association[$t[1]] = $t[2].'</br>';
    >>Inversion du 1 et du 2 et rajout du passage a la ligne
    !

    Résultat:

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Nbr de titre analysé(s) :11
    Array ( [Jeff Hil0 ft Cadatta - Tri.mp3] => 20835
    [Metricks - Waterfoam.mp3] => 20835
    [Machiavelique Underground ft U115 - Exclusive for u115 over blog com.mp3] => 20354
    [Danylo - Here Comes The Sound (Jazzy Mix).mp3] => 20044
    [Cadatta - Tri (Jeff Hil0 rmx).mp3] => 20835
    [AdamZ ft Electric Boogie - The AdamZ Project.mp3] => 20352
    [Sonikadivision - Speed Tribal Remix.mp3] => 20377
    [Davidaubrun - Egoisme du Conformisme.mp3] => 21752
    [Muttonheads - Demon On Da Way (Stephane V Rmx).mp3] => 20045
    [DJ Magamed - Unknow (Energy Original Tech House Version Mix).mp3] => 20811
    [Carbo - Fly To Ibiza.mp3] => 19895
    )
    
    11

    Reste le second problème qui lui est plus corsé pour le titre qui n'a pas de balise BPM!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par défaut
    OK donc pour relancer la question et parfaire le code définitivement voici clairement le problème restant qui se situe sur l'analyse de ce passage irrégulier du XML:

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <Song FileName="Machiavelique Underground ft U115  - Exclusive for u115 over blog com.mp3" FileSize="65801730">
      <Infos Date="704260340" />
     </Song>
     <Song FileName="Atomic Cat - Red Alert.mp3" FileSize="10059776" TagDate="703112032">
      <Infos SongLength="18481536" />
      <BPM Bpm="20354" Phase="2058" />
      <FAME IsScanned="1" Volume="9107" />
      <Automix MixType="3" TempoStart="2607370" TempoEnd="15308266" CutStart="541344" CutEnd="17549696" FadeStart="185856" FadeEnd="18240000" />
     </Song>

    Le code vient sur le premier titre (Machiavélique) et ne trouve pas la balise BPM et va la chercher sur le second.
    Conclusion:
    Le premier titre qui n'avait pas de BPM apparait avec le BPM du second qui lui au final n apparait pas.

    On obtient ce résultat donc:
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
     [Machiavelique Underground ft U115 - Exclusive for u115 over blog com.mp3] => 20354

    ALors qu'il faudrait obtenir:
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    Atomic Cat - Red Alert.mp3=> 20354

    *** Détection du nombre de titre passé a la trappe car ils n avaient pas d info BPM**
    Je rajoute un compteur de titre (info BPM ou pas) afin de mesurer l'ampleur du problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $nbtitre = preg_match_all('|<Song FileName="(.*)" FileSize=".*" TagDate=".*">.*<BPM Bpm="(.*)"|sU', $contenu, $titre, PREG_SET_ORDER);
    $compttitre = preg_match_all('|<Song FileName="(.*)"|sU', $contenu, $atitre, PREG_SET_ORDER);
    echo '<b>Nbr de titre présent dans le XML (info BPM ou pas) : '.$compttitre.'</b><br/>';
    echo '<b>Nbr de titre analysé(s) :'.$nbtitre.'<br/>';
    Ce qui sur un gros fichier me donne un total de 1030 titres dont 10 sans info BPM.
    Reste a savoir si c'est possible de ne pas prendre en compte ces 10 titres automatiquement !


    Deux optique pour résoudre ce problème et les deux me conviendrait (je compte faire un traitement local et si le code est pas parfait je suis pret a fire quelque manip supplémentaire a la main enfin pas trop!)
    Soit:
    >> Un code qui permette de supprimer au préalable dans le fichier XML les balise Song qui ne contienne pas d info BPM (donc de sous balise BPM).
    OU
    >> Une petite adaptation du code présenté ci dessus qui permette de ne pas faire l extraction lorsque le titre n a pas de BPM...
    Par exemple en excluant de la recherche les motif suivant !!!:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     <Infos Date="704260340" />
     </Song>
    Comment rajouter cette exclusion? ou autre méthode?

    Help !

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/11/2012, 13h47
  2. Réponses: 1
    Dernier message: 22/04/2008, 11h24
  3. Réponses: 3
    Dernier message: 06/08/2007, 03h44
  4. [DOM] (org.w3c.dom) copier un noeud d'un fichier XML dans un autre fichier XML
    Par snoop dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 13/02/2007, 17h22
  5. Importer le contenu un fichier xml dans un autre fichier xml
    Par gedeon555 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/07/2005, 11h49

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