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

XSL/XSLT/XPATH XML Discussion :

[XSLT] Comment intégrer du XML à un site web ? [Débutant(e)]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 17
    Points
    17
    Par défaut [XSLT] Comment intégrer du XML à un site web ?
    Bonjour,

    Tout d'abord merci à ce forum et aux membres d'éxister.

    Voilà, je suis un webmaster pas très doué, j ai fait un site qui n'est pas encore en ligne, un site en php, avec une base mysql, où il y a plein de services gratuits, genre un annuaire que l'on a rempli, des adresses d'associations par pays etc... je pense que le contenu du site ne vous interresse pas donc je ne m'attarde point.

    Il y a un service que je veux ajouter, c'est l'horoscope. J'ai des fichier XML pour pour chaque mois de l'année.

    Mes faibles connaissances en XML sont a partir d'un fichier xml, je sais ecrire un fichier xsl pour afficher et mettre en forme le fichier xml. Le probleme c'est que si le fichier XML est super long, je vais me trouver en face d'une page avec trop de contenu, mon but est de trier le fichier xml et de le mettre en forme "dynamiquement" (je ne sais pas si ca se dit).

    je vous met un bout de code de janvier:
    horos_2007_01.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
     
    <?xml version="1.0" encoding="iso-8859-1" ?>
    <!DOCTYPE daily_western_horo_fr SYSTEM "horos.dtd">
    <daily_western_horo_fr>
      <date>2007-01-01
        <signe>Bélier
          <amour>
    Profitez au maximum de cette configuration ...
          </amour>
          <argent>
    Vous aurez la chance d'améliorer votre situation ...
          </argent>
          <sante>
    Vous serez soucieux de votre santé. Mais votre mé...
          </sante>
        </signe>
    CA CONTINUE COMME CA PENDANT encore 10 000 lignes vu qu'il y a 1 mois douze signe et plein de theme
     </date>
    voici la DTD horos.dtd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!ELEMENT amour (#PCDATA)>
    <!ELEMENT argent (#PCDATA)>
    <!ELEMENT citation (#PCDATA)>
    <!ELEMENT clin_doeil (#PCDATA)>
    <!ELEMENT daily_western_horo_fr (date)*>
    <!ELEMENT date (#PCDATA | signe)*>
    <!ELEMENT famille_foyer (#PCDATA)>
    <!ELEMENT vie_sociale (#PCDATA)>
    <!ELEMENT nombre_chance (#PCDATA)>
    <!ELEMENT sante (#PCDATA)>
    <!ELEMENT signe (#PCDATA | amour | argent | citation | clin_doeil | famille_foyer | vie_sociale | nombre_chance | sante | travail)*>
    <!ELEMENT travail (#PCDATA)>
    Maintenant j'ai crée une page page php, avec des images qui pointes vers une autre page.
    Le lien est de ce type:

    horos.php?signe=belier&jour=01&mois=01

    Je veux exprimer la chose suivante afficher l'horoscope du belier pour le 1er (jour 01) janvier (mois 01) . Est ce une bonne idée?? Sachant que je ne suis pas très au courant des possibilité de xml dom etc...

    Pourriez vous me dire quoi lire ou quoi apprendre ou encore quoi piquer, pour que ça fonctionne.

    Je dois finir vite cette page pour passer à d'autre pages sur le site. Et le faite d'être bloqué m'angoisse. Je suis sur qu'avec vos conseils, je vais trouver une solution, une orientation qui va résoudre le problème.

    Merci

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    il me semble que ce que tu veux faire peut se réaliser par des passages de paramètres au xslt voir
    http://www.developpez.net/forums/sho...93&postcount=3
    pour le coté client et c'est possible aussi coté serveur avec php mais la la syntaxe varie enormement suivant la version de php utilisé ?

  3. #3
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    si le fichier est gros, la solution transformation par le client est à éviter, à cause de la bande passante que ça va bouffer... Pour ce qui concerne ta DTD, je déconseille ce genre de construction, qui ne se justifie pas dans ce contexte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <!ELEMENT date (#PCDATA | signe)*>
    <!ELEMENT signe (#PCDATA | amour | argent | citation | clin_doeil | famille_foyer >
    Ce modèle mixte est toujours plus difficile à traiter (voir ce fil) que si tu places la date et le signe dans des attributs ou des éléments distincts.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Erwy
    il me semble que ce que tu veux faire peut se réaliser par des passages de paramètres au xslt voir
    http://www.developpez.net/forums/sho...93&postcount=3
    pour le coté client et c'est possible aussi coté serveur avec php mais la la syntaxe varie enormement suivant la version de php utilisé ?
    Salut,

    Sur le liens que tum'as fourni, il est question de passer des paramètres à une feuille XSLTpar le biai d'un processeur, dans mon cas je choisi PHP.

    En gros, on a un fichier xml contenant des données, un fichier xslt

    Est ce que vous pouvez me dire si j'ai bien compris? Peut-on utilser un script php qui transmet les valeurs, dans mon cas le signe et la date, puis avec ces éléments charger le fichier xslt, qui va afficher un horoscope détaillé avec les paramètre date et signe.

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Re bonjour, il fait nuit j'ai passé mon apres midi sur google et devellopez.net.

    Excusez moi le moderateurs, je re up mon post, car je pense avoir avancé :
    J'ai tapé ce code xsl :

    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output
      method="html"
      encoding="ISO-8859-1"
      doctype-public="-//W3C//DTD HTML 4.01//EN"
      doctype-system="http://www.w3.org/TR/html4/strict.dtd"
      indent="yes" />
     
    <xsl:template match="daily_western_horo_fr">
      <html><body>
        <p>Amour :
          <xsl:apply-templates select="date[1]/signe[1]/amour"/>
        </p>
        <p>Argent :
          <xsl:apply-templates select="date[1]/signe[1]/argent"/>
        </p>
        <p>Sante :
          <xsl:apply-templates select="date[1]/signe[1]/sante"/>
        </p>
        <p>Famille, foyer :
          <xsl:apply-templates select="date[1]/signe[1]/famille_foyer"/>
        </p>
        <p>Vie sociale :
          <xsl:apply-templates select="date[1]/signe[1]/vie_sociale"/>
        </p>
        <p>Citation :
          <xsl:apply-templates select="date[1]/signe[1]/citation"/>
        </p>
        <p>Nombre chance :
          <xsl:apply-templates select="date[1]/signe[1]/nombre_chance"/>
        </p>
        <p>Clin d'oeil :
          <xsl:apply-templates select="date[1]/signe[1]/clin_doeil"/>
        </p>
     
      </body></html>
    </xsl:template>
     
    </xsl:stylesheet>
    ca donne cela horos.php

    Maintenant je sais que le [1] dans date correspond au noeud de la premiere date trouvé dans le xml, et le [1] dans signe correspond au premier signe dans le noeud signe.

    Comment faire pour transformé dynamiquement 1 en date, je m'explique, j ai mis
    1 pour date, c'est en faite 2007-01-01 et,
    1 pour signe, c'est en faite Bélier.

    Exemple si je veux 2007-01-08 , date sera dans mon xsl date[8]. 8(pour 8ème jour)
    Et si je veux le signe Lion , signe sera dans mon xsl signe[5]. 5(Lion est le 5ème signe)

    Alors ou dois je mettre les variables, j'ai lu que dans xsl on peut pas passer les variables. Aidez moi SVP merci

  6. #6
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Citation Envoyé par dztcid


    Maintenant je sais que le [1] dans date correspond au noeud de la premiere date trouvé dans le xml, et le [1] dans signe correspond au premier signe dans le noeud signe.

    Comment faire pour transformé dynamiquement 1 en date, je m'explique, j ai mis
    1 pour date, c'est en faite 2007-01-01 et,
    1 pour signe, c'est en faite Bélier.

    Exemple si je veux 2007-01-08 , date sera dans mon xsl date[8]. 8(pour 8ème jour)
    Et si je veux le signe Lion , signe sera dans mon xsl signe[5]. 5(Lion est le 5ème signe)

    Alors ou dois je mettre les variables, j'ai lu que dans xsl on peut pas passer les variables. Aidez moi SVP merci
    Il va te falloir passer les paramètres regarde ça: http://www.developpez.net/forums/sho...57&postcount=4
    Par contre ce n'est pas forcemment ta version de php c'est ce que je disais dans mon premier post. Par contre j'avais pas vu la structure de ton xml evite de melanger du contenu texte et des balises quand c'est inutiles ca complexifie les requêtes
    mal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a>un <b> bout <c>de texte</c></b></a>
    bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <a> 
      <cont>un</cont>
      <b> 
           <cont>bout</cont>
           <c>de texte</c>
      </b>
    </a>
    ou bien aussi (depend de la forme de la donné)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <a cont="un"> 
      <b cont="bout"> 
             <c>de texte</c>
      </b>
    </a>
    tu vas modfier ton xslt comme ça (passe la date entière en paramètre)
    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output
      method="html"
      encoding="ISO-8859-1"
      doctype-public="-//W3C//DTD HTML 4.01//EN"
      doctype-system="http://www.w3.org/TR/html4/strict.dtd"
      indent="yes" />
    <xsl:param name="signe"/>
    <xsl:param name="date"/>
    <xsl:template match="daily_western_horo_fr">
      <html><body>
        <p>Amour :
          <xsl:apply-templates select="date[starts-with(text(),$date)]/signe[position()=$signe]/amour"/>
        </p>
     
      </body></html>
    </xsl:template>
     
    </xsl:stylesheet>

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Erwy
    tu vas modfier ton xslt comme ça (passe la date entière en paramètre)
    Ok , j' ai modifié mon xslt. Mais où est-ce que je mets la date entière en parametre.
    J'ai essayé ici dans horos.php?date=2007-01-01&signe=8

    voici mon fichier horos.php ajouté les 2 $_GET
    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
    <?
    $date = $_GET['date'];
    $signe = $_GET['signe'];
    // Crée le processeur XSLT
    $xh = xslt_create();
    xslt_set_base ($xh, 'file://' . getcwd () . '/');
     
    // Traite le document, puis affiche le résultat
    $result = xslt_process($xh, 'horos_2007_01.xml', 'horos.xsl');
    if (!$result)
      echo ("Erreur XSLT ...");
    else
     // echo date("m.d.y");
      echo ($result);
     
    // Détruit le processeur XSLT
    xslt_free($xh);
    ?>
    Pourrais tu m'orienter, j ai pas compris en faite si je dois déclarer les variables date et signe dans le fichier horos.php, et/ou dans le fichier horos.xsl . Si je dois le faire dans le xsl, je ne sais pas où le faire.
    merci

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Cher Erwy,

    Je suis pas très malin, j ai mis du temps à comprendre, mais ca y'est ca fonctionne, j ai complété mon script horos.php par celui du post http://www.developpez.net/forums/sho...57&postcount=4

    J'ai passé les parametre comme tu as dis, maintenant ça fonctionne

    Merci tu as gagné un nouveau potes !!!!!

    Merci à vous !

    Merci au site et vive la vie !!!!

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Voici le codes au cas où ca sert à quelqu'un

    horos.xsl
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output
      method="html"
      encoding="ISO-8859-1"
      doctype-public="-//W3C//DTD HTML 4.01//EN"
      doctype-system="http://www.w3.org/TR/html4/strict.dtd"
      indent="yes" />
     
    <xsl:param name="signe"/>
    <xsl:param name="date"/>
    <xsl:template match="daily_western_horo_fr">
      <html><body>
        <p>Amour :
          <xsl:apply-templates select="date[starts-with(text(),$date)]/signe[position()=$signe]/amour"/>
        </p>
        <p>Argent :
          <xsl:apply-templates select="date[starts-with(text(),$date)]/signe[position()=$signe]/argent"/>
        </p>
        <p>Sante :
          <xsl:apply-templates select="date[starts-with(text(),$date)]/signe[position()=$signe]/sante"/>
        </p>
        <p>Famille, foyer :
          <xsl:apply-templates select="date[starts-with(text(),$date)]/signe[position()=$signe]/famille_foyer"/>
        </p>
        <p>Vie sociale :
          <xsl:apply-templates select="date[starts-with(text(),$date)]/signe[position()=$signe]/vie_sociale"/>
        </p>
        <p>Citation :
          <xsl:apply-templates select="date[starts-with(text(),$date)]/signe[position()=$signe]/citation"/>
        </p>
        <p>Nombre chance :
          <xsl:apply-templates select="date[starts-with(text(),$date)]/signe[position()=$signe]/nombre_chance"/>
        </p>
        <p>Clin d'oeil :
          <xsl:apply-templates select="date[starts-with(text(),$date)]/signe[position()=$signe]/clin_doeil"/>
        </p>
     
      </body></html>
    </xsl:template>
     
    </xsl:stylesheet>
    horos.php
    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
     
    <?
    $date = $_GET['date'];
    $signe = $_GET['signe'];
    $param_xslt = Array
    (
      'date'       => $date,
      'signe'     => $signe,
      // rajoutez vos paramètres XSLT
    );
     
    // Paramètres pour Sablotron (processeur XSLT)
    $param_sablotron = Array
    (
      '/_xml' => $xml
    );
     
    // Crée le processeur XSLT
    $xh = xslt_create();
    xslt_set_base ($xh, 'file://' . getcwd () . '/');
     
    // Traite le document, puis affiche le résultat
    $result = xslt_process($xh, 'horos_2007_01.xml', 'horos.xsl', NULL, $param_sablotron, $param_xslt);
    if (!$result)
      echo ("Erreur XSLT ...");
    else
     // echo date("m.d.y");
      echo ($result);
     
    // Détruit le processeur XSLT
    xslt_free($xh);
    ?>
    voila ca fonctionne si je met horos.php changé la date (une date 2007-01-01 type Y-m-d sachant qu'il n'y a que le mois de janvier. Et le signe de 1 à 12 parceque il y a 12 signes)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/06/2007, 15h33
  2. [XSLT] Comment récupérer le xml entier?
    Par caralho27 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 08/02/2007, 15h16
  3. Réponses: 1
    Dernier message: 26/01/2007, 16h13
  4. [VS2005][NUnit] Comment utiliser Nunit sur un site web
    Par Dadou74 dans le forum Visual Studio
    Réponses: 1
    Dernier message: 31/08/2006, 09h53
  5. [CKEditor] Comment intégrer fckeditor dans ma page Web
    Par Kylen dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 22/12/2005, 19h13

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