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]Problème d'utilisation de XSL avec fichier GPX.


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 15
    Points
    15
    Par défaut [XSLT]Problème d'utilisation de XSL avec fichier GPX.
    Bonjour,

    je souhaite utiliser XSL pour convertir un fichier de données issues d'un GPS.
    J'ai donc mes données GPS au format GPX qui, si j'ai bien suivi, est un format XML. Je précise que je débute, mais que j'ai déjà réalisé auparavant un fichier XSL concernant l'affichage de données sur des marchandises stockées dans un fichier XML.

    Disons que l'arborescence m'intéressant dans le GPX est la suivante :

    gpx/trk/trkseg/trkpt/@lat pour la latitude
    gpx/trk/trkseg/trkpt/@long pour la longitude
    gpx/trk/trkseg/trkpt/@time pour l'instant de relevé du point.

    Pour commencer de manière simple (du moins le pensais-je), j'ai fait un fichier XSL en me basant sur le fichier que j'avais déjà réalisé sur la base d'un XML standard et qui fonctionnait.
    Je veux commencer par afficher la latitude du premier point , puis celle de tous les points.

    j'ai donc fait un
    <xsl:value-of select="gpx/trk/trkseg/trkpt/@lat"/>
    <xsl:for-each select="gpx/trk/trkseg/trkpt">
    <xsl:value-of select="@lat"/>
    </xsl:for-each>
    dans mon fichier XSL. J'ai bien vérifié que mon fichier XML "appelle" bien la feuille de style, la page s'ouvre, mais rien ne s'affiche, malgré plusieurs essais.

    Bref j'arrive à manipuler d'autres fichiers XML, mais pas ceux au format GPX.

    Qu'est ce qui ne va pas dans ce que je fais ??? Quelles sont les vérifications que je me dois de faire de manière chronologique ?

    Ca m'ennuie passablement de buter si tôt dans mon projet sur un problème je pense mineur, mais comme j'ai passé toutes les idées d'erreurs que je trouvais en revue sans succès, je m'en remets maintenant à vous et à votre expérience. Quelle est la bonne syntaxe pour afficher ces données ??

    Par ailleurs, dans le cadre des prochaines étapes de conversion du fichier, il me faudra calculer la vitesse entre deux points. Le calcul peut-il se faire directement dans le fichier xsl ou bien vaut-il mieux manipuler les données récupérées par PHP ?

    Vous remerciant par avance de l'aide que vous voudrez bien me fournir !

  2. #2
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bonjour,

    pour t'en dire plus, il faudrait que tu nous passer tes fichiers xml et xslt.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    ok, alors voici un fichier d'exemple de fichier GPX :

    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
    60
    61
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
    <?xml-stylesheet href="gpx.xsl" type="text/xsl"?>
     
    <gpx xmlns="http://www.topografix.com/GPX/1/1" creator="G7ToWin A.00.200e" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
     
      <metadata>
        <link href="http://www.gpsinformation.org/ronh/g7towin.htm">
          <text>G7ToWin</text>
        </link>
        <time>2009-08-23T21:16:58Z</time>
        <bounds minlat="43.0714333" minlon="6.1621667" maxlat="43" maxlon="6"/>
      </metadata>
     
      <trk>
        <type>Track black</type>
        <extensions>
          <line xmlns="http://www.topografix.com/GPX/gpx_style/0/2">
            <color>000000</color>
          </line>
        </extensions>
        <trkseg>
              <trkpt lat="43.117550000" lon="6.256300000">
            <ele>1.000000</ele>
            <time>2009-08-23T14:44:10Z</time>
          </trkpt>
          <trkpt lat="43.116683333" lon="6.255266667">
            <ele>0.000000</ele>
            <time>2009-08-23T14:44:22Z</time>
          </trkpt>
          <trkpt lat="43.115633333" lon="6.253233333">
            <ele>0.000000</ele>
            <time>2009-08-23T14:44:39Z</time>
          </trkpt>
          <trkpt lat="43.113916667" lon="6.249883333">
            <ele>0.000000</ele>
            <time>2009-08-23T14:45:06Z</time>
          </trkpt>
          <trkpt lat="43.113100000" lon="6.248733333">
            <ele>0.000000</ele>
            <time>2009-08-23T14:45:16Z</time>
          </trkpt>
          <trkpt lat="43.112183333" lon="6.248133333">
            <ele>0.000000</ele>
            <time>2009-08-23T14:45:26Z</time>
          </trkpt>
          <trkpt lat="43.111333333" lon="6.246583333">
            <ele>1.000000</ele>
            <time>2009-08-23T14:45:38Z</time>
          </trkpt>
          <trkpt lat="43.107733333" lon="6.245616667">
            <ele>2.000000</ele>
            <time>2009-08-23T14:46:20Z</time>
          </trkpt>
          <trkpt lat="43.106400000" lon="6.245566667">
            <ele>2.000000</ele>
            <time>2009-08-23T14:46:35Z</time>
          </trkpt>
          </trkseg>
      </trk>
    </gpx>
    et ma vaine tentative XSL pour simplement afficher les données :
    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
    <?xml version="1.0" encoding="iso-8859-1"?><!-- DWXMLSource="sample.xml" -->
    <!DOCTYPE xsl:stylesheet  [
    	<!ENTITY nbsp   "*">
    	<!ENTITY copy   "©">
    	<!ENTITY reg    "®">
    	<!ENTITY trade  "™">
    	<!ENTITY mdash  "—">
    	<!ENTITY ldquo  "“">
    	<!ENTITY rdquo  "”"> 
    	<!ENTITY pound  "£">
    	<!ENTITY yen    "¥">
    	<!ENTITY euro   "€">
    ]>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <xsl:output method="html" encoding="iso-8859-1" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
    <xsl:template match="/">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    <title>Document sans titre</title>
    <style type="text/css">
    <xsl:comment>
    .sample {
    	font-family: Arial;
    }
    </xsl:comment>
    </style>
    </head>
     
    <body>
    <xsl:value-of select="gpx/trk/trkseg/trkpt/@lat"/>
    <xsl:for-each select="gpx/trk/trkseg/trkpt">
    <xsl:value-of select="@lat"/>
    </xsl:for-each> 
    </body>
    </html>
     
    </xsl:template>
    </xsl:stylesheet>

    Le fichier GPX correspond à la conversion des données GPS par le logiciel G7toWin, le fichier XSL j'ai repris la base d'un premier essai que j'avais fait en XML qui marchait, mais apparemment soit j'ai modifié quelque chose qu'il ne fallait pas, soit ça ne peut pas s'appliquer.

    merci de vos éclaircissements.

  4. #4
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bonjour,

    l'instruction for-each applique les règles qu'elle contient à chacun des noeuds de l'ensemble de noeuds évalué par l'expression Xpath, valeur de l'attribut select.

    Dans ton code, ton expression XPath "gpx/trk/trkseg/trkpt"
    retourne un unique noeud : le noeud trkpt en première position.

    Pour obtenir l'ensemble des noeuds trkpt, il suffit
    d'utiliser l'expression XPath "//trkpt". D'où le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:for-each select="//trkpt">
    <xsl:value-of select="@lat"/>
    </xsl:for-each>

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    désolé pour le retard en réponse, je suis actuellement en déplacement,
    merci pour la précision,
    j'essaie tout ça "de retour à la maison" et ferai un retour sur mon problème.

    Merci encore !

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Heu, désolé mais c'est juste un problème de "namespace" non déclaré dans le xsl-t.
    Ceci devrait fonctionner :
    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
    <xsl:stylesheet version="1.0" xmlns:gpx="http://www.topografix.com/GPX/1/1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <xsl:output method="html" encoding="iso-8859-1" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
    
    <xsl:template match="/">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    <title>Document sans titre</title>
    <style type="text/css">
    <xsl:comment>
    .sample {
    	font-family: Arial;
    }
    </xsl:comment>
    </style>
    </head>
     
    <body>
    <xsl:value-of select="gpx:gpx/gpx:trk/gpx:trkseg/gpx:trkpt/@lat"/>
    <xsl:for-each select="gpx:gpx/gpx:trk/gpx:trkseg/gpx:trkpt">
    <xsl:value-of select="@lat"/>
    </xsl:for-each> 
    </body>
    </html>
     
    </xsl:template>
    </xsl:stylesheet>

  7. #7
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bonjour,

    Après relecture, une correction :
    Dans ton code, ton expression XPath "gpx/trk/trkseg/trkpt"
    retourne un unique noeud : le noeud trkpt en première position.
    c'est faux ! Dans ton contexte, cette expression retourne bien l'ensemble des noeuds souhaités, cette expression est donc correcte.

    Enfin, la solution de Morbo fonctionne très bien.

    Désolé

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

Discussions similaires

  1. [GD] Problème d'utilisation de GD2 avec EasyPHP
    Par Megan dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 23/04/2007, 13h51
  2. Problème d'utilisation d'Axis avec des WSDL
    Par Tino13 dans le forum Services Web
    Réponses: 2
    Dernier message: 31/03/2007, 10h09
  3. Problème lien de type file avec fichiers locaux
    Par tomburn dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 11/01/2007, 16h03
  4. Problème prise en charge XSL avec internet explorer 6
    Par Taildan dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 19/02/2006, 07h19
  5. Problème d'utilisation de Mysql avec dev-c++
    Par Watchi dans le forum Dev-C++
    Réponses: 10
    Dernier message: 06/08/2004, 14h35

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