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

XML/XSL et SOAP Discussion :

Pb de balises dans un fichier XML


Sujet :

XML/XSL et SOAP

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Points : 11
    Points
    11
    Par défaut Pb de balises dans un fichier XML
    Bonjour tout le monde,

    J'ai un petit souci avec une appli que je code en php dans le cadre d'un stage.
    Voilà, je dois travailler sur un fichier XML existant et je dois pouvoir afficher des dates.
    Le XML ressemble à ç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
    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
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <?xml-stylesheet type='text/xsl' href='forme.xsl'?>
    <tasks resource-id="CS">
    <task id="200701" load="100">
    <start>10/09/2007</start>
    <project>XxX</project>
    <asker>XxXxXx</asker>
    <name>Tests</name>
    <cat>WEBphp</cat>
    <duedate>19/10/2007</duedate>
    <end/>
    <duration>10</duration>
    <complete/>
    <day id="10" month="09" year="2007"><matin>1</matin><apresmidi>1</apresmidi></day>
    <day id="11" month="09" year="2007"><matin>1</matin><apresmidi>1</apresmidi></day>
    <day id="12" month="09" year="2007"><matin>1</matin><apresmidi>1</apresmidi></day>
    <day id="17" month="09" year="2007"><matin>1</matin></day>
    <day id="25" month="09" year="2007"><matin>1</matin></day>
    <day id="26" month="09" year="2007"><matin>1</matin><apresmidi>1</apresmidi></day>
    <day id="27" month="09" year="2007"><apresmidi>1</apresmidi></day>
    <day id="18" month="10" year="2007"><apresmidi>1</apresmidi></day>
    <fini>18/10/2007</fini>
    </task>
     
     
     
    <task id="200702" load="100">
    <start>15/09/2007</start>
    <project>XxX</project>
    <asker>XxXxX</asker>
    <name>Tests Bis</name>
    <cat>WEBphp</cat>
    <duedate>19/10/2007</duedate>
    <end/>
    <duration>15</duration>
    <complete/>
    <day id="17" month="09" year="2007"><apresmidi>1</apresmidi></day>
    <day id="20" month="09" year="2007"><matin>1</matin><apresmidi>1</apresmidi></day>
    <day id="25" month="09" year="2007"><apresmidi>1</apresmidi></day>
    <day id="27" month="09" year="2007"><matin>1</matin></day>
    <day id="5" month="10" year="2007"><matin>1</matin><apresmidi>1</apresmidi></day>
    </task>
     
     
     
    <task id="200703" load="100">
    <start>01/10/2007</start>
    <project>XxX</project>
    <asker>XxXxX</asker>
    <name>tests divers</name>
    <cat>DIVtest</cat>
    <duedate>18/10/2007</duedate>
    <end/>
    <duration>6</duration>
    <complete></complete>
    </task>
     
    </tasks>
    Julp m'avait déjà bien avancé en m'indiquant comment afficher toutes les dates comprises entre la balise "START" et la date du jour.
    Seulement, maintenant je dois faire le tri et n'afficher que les jours compris entre la balise "START" et la date du jour, mais seulement ceux ne correspondant pas à la balise "DAY".

    J'avais pensé, pour pouvoir faire la comparaison à utiliser la fonction implode pour chaque "Day" mais je ne pense pas que ça soit une solution optimale.

    Si vous avez une petite idée, ça serait grandiose. En attendant, je continue à chercher de mon côté.
    Merci d'avance de votre aide...

  2. #2
    Expert éminent sénior

    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
    Points : 17 777
    Points
    17 777
    Par défaut
    Un implode ? Si j'ai bien compris ce que vous vouliez faire vous pourriez utiliser les opérations "ensemblistes" sur les tableaux (différence) :
    Code PHP : 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
    <?php
    header('Content-type: text/plain');
     
    function date2timestamp($date) {
        if (preg_match('~^(\d{2})([-/])(\d{2})\2(\d{4})$~', $date, $m) && checkdate($m[3], $m[1], $m[4])) {
            return mktime(0, 0, 0, $m[3], $m[1], $m[4]);
        } else if (preg_match('~^(\d{4})([-/])(\d{2})\2(\d{2})$~', $date, $m) && checkdate($m[3], $m[4], $m[1])) {
            return mktime(0, 0, 0, $m[3], $m[4], $m[1]);
        } else {
            die("Problème sur une date : $date");
        }
    }
     
    function lister_dates($deb, $fin) {
        $tDeb = date2timestamp($deb);
        $tFin = date2timestamp($fin);
     
        $res = array();
        while ($tDeb < $tFin) {
            $tDeb += 86400;
            if (date('N', $tDeb) < 6) {
                array_push($res, date('d/m/Y', $tDeb));
            }
        }
        return $res;
    }
     
    $sxml = simplexml_load_file('tasks2.xml');
    foreach ($sxml->task as $t) {
        $entre = lister_dates($t->start, date('d/m/Y'));
        // <Partie ajoutée>
        $jours = array();
        foreach ($t->day as $d) {
            array_push($jours, $d['id'] . '/' . $d['month'] . '/' . $d['year']);
        }
        $reste = array_diff($entre, $jours);
        # Pour débogage/visualiser le résultat
        echo str_repeat('=', 80) . PHP_EOL;
        print_r($entre); # Le tableau composé des dates entre celle de l'élément start et maintenant
        print_r($reste); # Le même tableau où les éléments day ont été soustraits
        // </Partie ajoutée>
    }

Discussions similaires

  1. Identifier las balises dans un fichier xml
    Par maroua_mm dans le forum Qt
    Réponses: 1
    Dernier message: 18/08/2009, 11h11
  2. Réponses: 9
    Dernier message: 18/05/2009, 08h25
  3. Récupérer plusieurs balises dans un fichier XML
    Par sandddy dans le forum Langage
    Réponses: 3
    Dernier message: 28/01/2009, 14h48
  4. tester la présence de balises dans le fichier xml
    Par Balbuzard dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 29/08/2008, 15h11

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