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] Parser un fichier XML SOAP


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Par défaut [XSLT] Parser un fichier XML SOAP
    Bonjour, je n'arrive as à parser un fichier XML contenant des balises SOAP.

    En voici la forme générale :

    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
    <?xml version="1.0" encoding="UTF-8" ?>
    <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <SOAP:Body>
            <getVehiclesBySaleResponse xmlns="Domino" xmlns:encodingStyle="http://schemas.xmlsoap.org/soap/encoding">
                <getVehiclesBySaleResult>
                    <sale>
                        <timestamp>30/10/2006</timestamp>
                        <clientid>XXXXXX</clientid>
                        <saleid>XXXXXXXXXXXXXXXXXXXXXXXX</saleid>
                        <departement>XX</departement>
                        <vehicles>
                            <vehicle>...</vehicle>
                            ...
                            <vehicle>...</vehicle>
                        </vehicles>
                    </sale>
                </getVehiclesBySaleResult>
            </getVehiclesBySaleResponse>
        </SOAP:Body>
    </SOAP:Envelope>
    Je voudrais extraire les données en prenant comme noeud racine de sortie <getVehiclesBySaleResult>.

    Ainsi, je voudrais avoir un fichier de sortie selon le modè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
    <getVehiclesBySaleResult>
        <sale>
            <timestamp>30/10/2006</timestamp>
            <clientid>XXXXXX</clientid>
            <saleid>XXXXXXXXXXXXXXXXXXXXXXXX</saleid>
            <departement>XX</departement>
            <vehicles>
                <vehicle>...</vehicle>
                ...
                <vehicle>...</vehicle>
            </vehicles>
        </sale>
    </getVehiclesBySaleResult>
    J'ai essayé d'exploiter cet exemple : http://www.biglist.com/lists/xsl-lis.../msg01649.html mais rien n'y fait...

    Merci d'avance de votre aide.

  2. #2
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Par défaut Balises codes
    Bon évidemment comme ça ça a l'air bête mais en fait je n'arrive pas à utiliser les données en tant que tel.

    Mon problème ne se résume pas à enlever les balises SOAP, mais il faudrait que je puisse renommer les noeuds, les fusionner, etc.

    Pour plus de détails, voici mon fichier XSL actuel :

    --------------------------------------------------------------------

    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
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" exclude-result-prefixes="SOAP" version="1.0">
     
    <xsl:template match="/">
        <xsl:element name="annonces">
            <xsl:apply-templates select="SOAP:Envelope/SOAP:Body/node()/node()"/>
        </xsl:element>
    </xsl:template>
     
    <xsl:template name="getVehiclesBySaleResult">
        <xsl:element name="annonce">
            <xsl:apply-templates/>
            </xsl:element>
        </xsl:template>
     
    <xsl:template match="*">
        <xsl:element name="{name(.)}">
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>
     
    </xsl:stylesheet>
    -------------------------------------------------------------

    Si j'utilise mon fichier XML ci-dessus et ce fichier xsl, le template "getVehiclesBySaleResult" n'est jamais appelé.

    Merci de m'expliquer où je fais fausse route.

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

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

    tu as oublié d'utiliser l'espace de noms de SOAP dans ton template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template name="SOAP:getVehiclesBySaleResult">
      <xsl:element name="annonce">
        <xsl:apply-templates/>
      </xsl:element>
    </xsl:template>
    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 averti
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Par défaut
    Bonjour GrandFather,

    en fait pas malgré ton aide je n'y arrive toujours pas. Je me dout qu'il doit s'agir d'un tout petit truc à modifier mais vraiment je tourne en rond et je n'y arrive pas.

    Voici un extrait de mon nouveau fichier XSL :

    --------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <xsl:template match="SOAP:getVehiclesBySaleResult">
        <xsl:for-each select="sale">
            <xsl:call-template name="sale">
    	<xsl:with-param name="contrat" select="clientid"/>
            </xsl:call-template>			    
        </xsl:for-each>
    </xsl:template>
    --------------------------------------------

    Pourrais-tu me dire pourquoi je ne rentre jamais dans ce template ?

    J'ai aussi essayé cette version qui n'a pas donné plus de résultats :

    --------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <xsl:template match="//sale"> <!-- //SOAP:sale ne marche pas non plus -->
        <xsl:call-template name="sale">
            <xsl:with-param name="contrat" select="clientid"/>
        </xsl:call-template>			    
    </xsl:template>
    --------------------------------------------

  5. #5
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Oublie ma première réponse, je me suis gouré d'espace de noms. getVehiclesBySaleResult appartient à l'espace de noms "Domino" et non pas à celui de SOAP...

    Le code correct devrait donc être celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:domino="Domino">
     
    ...
     
    <xsl:template match="domino:getVehiclesBySaleResult">
    ...
    </xsl:template>
    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

  6. #6
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Par défaut
    Merci beaucoup !
    Effectivement je venais d'arriver à la même conclusion de mon côté.
    En fait ce qui me gênait c'est que le namespace SOAP a une déclaration http://......../Envelope alors que Domino n'avait finalement qu'un seul mot Domino. Donc je ne l'avais pas mis dans la balise xsl:stylesheet

    Désolé encore pour le temps passé...

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

Discussions similaires

  1. [xslt] Parser 2 fichiers XML
    Par malekms dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/12/2005, 12h22
  2. [XSLT] Diviser un fichiers xml en plusieurs pages html
    Par thibaut06 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/04/2005, 16h56
  3. [XSLT] Fusion de fichier XML ???
    Par webtheque dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/03/2005, 20h13
  4. [SAX] parser un fichier xml en Java
    Par royou dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/02/2005, 17h12
  5. parser des fichier .xml en perl
    Par djibril dans le forum Modules
    Réponses: 13
    Dernier message: 18/05/2004, 17h08

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