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 :

transformation XML via Xpath


Sujet :

XML/XSL et SOAP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut transformation XML via Xpath
    Bonjour!

    Je tente de transformer un fichier xml en un autre pour l'adapter à un datagrid. Le but est de découpler toute l'arborescence pour passer de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <tree>
      <batiment libelle="toto1">
         <etage ibelle="toto2">
            <zone ibelle="toto3" />
         </etage>
      </batiment>
    </tree>
    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <tree>
       <row batiment="toto1" etage="toto2" zone="toto3" />
    <tree>
    Mon format de départ est le suivant :
    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
     
     
    <?xml version="1.0" encoding="utf-8" ?>
    <tree>
      <batiment id="1" libelle="batiment1">
        <etage id="1" libelle="etage1">
          <zone id="1" libelle="zone1" />
          <zone id="2" libelle="zone2" />
          <zone id="3" libelle="zone3" />
        </etage>
        <etage id="2" libelle="etage2">
          <zone id="1" libelle="zone1" />
          <zone id="2" libelle="zone2" />
          <zone id="3" libelle="zone3" />
        </etage>
      </batiment>
      <batiment id="2" libelle="batiment2">
        <etage id="1" libelle="etage1">
          <zone id="1" libelle="zone1" />
          <zone id="2" libelle="zone2" />
          <zone id="3" libelle="zone3" />
        </etage>
        <etage id="2" libelle="etage2">
          <zone id="1" libelle="zone1" />
          <zone id="2" libelle="zone2" />
          <zone id="3" libelle="zone3" />
        </etage>
      </batiment>
      <batiment id="3" libelle="batiment3">
        <etage id="1" libelle="etage1">
          <zone id="1" libelle="zone1" />
          <zone id="2" libelle="zone2" />
          <zone id="1" libelle="zone3" />
        </etage>
      </batiment>
    </tree>
    Mon fichier 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
     
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
    >
      <xsl:strip-space elements="batiment" />
      <xsl:strip-space elements="etage" />
      <xsl:strip-space elements="zone" />
      <xsl:output method="xml" indent="yes"/>
      <xsl:template match="tree">
        <xsl:element name="tree">
          <xsl:for-each select="batiment">
            <xsl:for-each select="etage">
              <xsl:for-each select="zone">
                <xsl:element name="row">
                  <xsl:attribute name="batiment">
                    <xsl:value-of select="ancestor::batiment[@libelle]" />
                  </xsl:attribute>
                  <xsl:attribute name="etage">
                    <xsl:value-of select="ancestor::etage[@libelle]" />
                  </xsl:attribute>
                  <xsl:attribute name="zone">
                    <xsl:value-of select="descendant-or-self::zone[@libelle]" />
                  </xsl:attribute>
                </xsl:element>
              </xsl:for-each>
            </xsl:for-each>
          </xsl:for-each>
        </xsl:element>
      </xsl:template>
    </xsl:stylesheet>
    mon résultat m'affiche bien le format voulu mais les attributs sont vides ....

    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <tree>
      <row batiment="" etage="" zone="" />
      <row batiment="" etage="" zone="" />
      <row batiment="" etage="" zone="" />
      <row batiment="" etage="" zone="" />
      <row batiment="" etage="" zone="" />
      <row batiment="" etage="" zone="" />
      <row batiment="" etage="" zone="" />
      <row batiment="" etage="" zone="" />
      <row batiment="" etage="" zone="" />
      <row batiment="" etage="" zone="" />
      <row batiment="" etage="" zone="" />
      <row batiment="" etage="" zone="" />
      <row batiment="" etage="" zone="" />
      <row batiment="" etage="" zone="" />
      <row batiment="" etage="" zone="" />
    </tree>
    Auriez vous une idée du pourquoi ?

    Merci d'avance pour vos réponses.

    Mamat.

  2. #2
    Membre émérite Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    moi j aurais fais plus simple
    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
     
    .......................
    <xsl:element name="tree">
    <xsl:template match="tree">
                 <xsl:element name="row">
                  <xsl:attribute name="batiment">
                    <xsl:value-of select="./batiment/@libelle" />
                  </xsl:attribute>
                  <xsl:attribute name="etage">
                    <xsl:value-of select="./etage/@libelle" />
                  </xsl:attribute>
                  <xsl:attribute name="zone">
                    <xsl:value-of select="./etage/zone/@libelle]" />
                  </xsl:attribute>
                </xsl:element>
      </xsl:template>
    </xsl:element>
    voila j'ai pas l habitude de creer des xml et je sais pas si l element tree et bien mis mais les element row seront bien construit je pense

    voila tiens moi au jus ++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut
    Bonjour!

    Merci pour ta réponse! Malheureusement je ne récupère toujours pas les données dans mes attributs avec ton code.
    Le truc très bizarre est que mon script m'affiche correctement les données en mode debug mais pas sur la sortie en xml...

    Mamat.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut
    Rebonjour!

    Apres ton post j'ai adapter ta syntaxe avec ma structure et le résultat est nickel :

    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
     
      <xsl:strip-space elements="batiment" />
      <xsl:strip-space elements="etage" />
      <xsl:strip-space elements="zone" />
      <xsl:output method="xml" indent="yes"/>
    <xsl:template match="tree">
        <xsl:element name="tree">
          <xsl:for-each select="batiment">
            <xsl:for-each select="etage">
              <xsl:for-each select="zone">
                <xsl:element name="row">
                  <xsl:attribute name="batiment">
                    <xsl:value-of select="ancestor::batiment/@libelle" />
                  </xsl:attribute>
                  <xsl:attribute name="etage">
                    <xsl:value-of select="ancestor::etage/@libelle" />
                  </xsl:attribute>
                  <xsl:attribute name="zone">
                    <xsl:value-of select="descendant-or-self::zone/@libelle" />
                  </xsl:attribute>
                </xsl:element>
              </xsl:for-each>
            </xsl:for-each>
          </xsl:for-each>
        </xsl:element>
      </xsl:template>
    </xsl:stylesheet>
    j'avais encadré les attributs avec des crochets alors qu'il sont considérés comme un niveau inférieur (précédé d'un "/" )...

    Merci pour ton aide!

    Mamat.

  5. #5
    Membre émérite Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    nop

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

Discussions similaires

  1. Récupérer un attribut XML via xpath
    Par shaloine dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 28/07/2010, 10h09
  2. [DOM] Recherche dans un fichier XML via XPath
    Par Sayrus dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 18/06/2007, 16h43
  3. Transformation XML via un XSL
    Par dahu17 dans le forum C#
    Réponses: 3
    Dernier message: 11/06/2007, 10h56
  4. transformation xml via xslt
    Par ronnie dans le forum XSL/XSLT/XPATH
    Réponses: 17
    Dernier message: 10/05/2005, 10h58
  5. Transformation xml + xsl -> HTML via PHP
    Par petit-ourson dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/10/2003, 22h42

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