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

VBScript Discussion :

[XML] Transformation XSL


Sujet :

VBScript

  1. #1
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut [XML] Transformation XSL
    J'ai un fichier XML que je voudrais transformer en un autre fichier XML, un peu plus optimisé.

    J'ai fait pour cela un fichier XSLT, qui permet de supprimer toutes les balises qui ne m'interessent pas.

    Est-il possible de faire appliquer ce XSL à mon fichier XML directement dans un VBScript. J'ai eu beau chercher, je n'ai pour l'instant rien trouvé qui puisse me mettre sur la voie.
    abertaud
    ---------

    - pas de réponse technique en PV, utilisez les forums
    - si vous trouvez seuls la solution, n'abandonnez pas votre post, mettez-le à jour pour les autres
    - le tag est parfois en voie d'extinction, participez à sa survie

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    tiens issue de l'aide MSDN :

    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
     
    Dim oXml 
    set oXml = CreateObject("MSXML2.DOMDocument")
    Dim oXsl 
    set oXsl = CreateObject("MSXML2.DOMDocument")
    oXml.validateOnParse = False
    oXml.async = False
    oXml.Load ("hello.xml") 'Attention au chemin du fichier
    If oXml.parseError.errorCode <> 0 Then
      MsgBox "erreur chargement XML : " & oXml.parseError.reason
    Else
     oXsl.async = False
     oXsl.Load ("hello.xsl")
     If oXsl.parseError.errorCode <> 0 Then
      MsgBox "erreur chargement XsL : " & oXsl.parseError.reason
     Else
      wScript.Echo oXml.transformNode(oXsl.documentElement)
     
    End If
    End If
    le fichier helo.xml correspondant :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="hello.xsl"?>
    <hello-world>   <greeter>An XSLT Programmer</greeter>   <greeting>Hello, World!</greeting></hello-world>


    le fichier hello.xsl :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml version="1.0"?><xsl:stylesheet       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"      version="1.0">
       <xsl:template match="/hello-world">       <HTML>         <HEAD>
               <TITLE></TITLE>
             </HEAD>         <BODY>            <H1><xsl:value-of select="greeting"/></H1>            <xsl:apply-templates select="greeter"/>         </BODY>       </HTML>   </xsl:template>
       <xsl:template match="greeter">       <DIV>from            <I><xsl:value-of select="."/></I>       </DIV>
       </xsl:template>
    </xsl:stylesheet>

  3. #3
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Ca ne fonctionne pas tel quel, mais ca "marchouille" :

    Je perds en fait l'indentation mais surtout, je ne peux pas faire marcher la fonction si mon fichier XML initial garde la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <ElementsRecuperes xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" 
      xsi:noNamespaceSchemaLocation="20070503-090205-export.xsd">
    Référence à un préfixe d'espace de noms non déclaré : 'xsi'.
    Pour que la processus fonctionne, je dois supprimer les attributs de ma balise racine Que l'indentation disparaisse, ce n'est pas gênant, elle doit pouvoir être recréée facilement. Par contre, être obligé de supprimer mon "SchemaLocation", c'est bien plus embêtant...
    abertaud
    ---------

    - pas de réponse technique en PV, utilisez les forums
    - si vous trouvez seuls la solution, n'abandonnez pas votre post, mettez-le à jour pour les autres
    - le tag est parfois en voie d'extinction, participez à sa survie

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    ben on n'as vu ni ton XML ni ton XSL...? cela viens peu-être d'eux...

    si c'est un probléme spécifique XML/XSL .. tu aurai peu-être de meilleure réponse ici XSL/XSLT/XPATH

    PS: merci quand même de nous tenir au courant...


  5. #5
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Je doute que le souci vienne d'eux ; la transformation a déjà été testée "à la main" avec un logiciel d'édition XML et XSLT. Tout se passe bien. C'est la mise en place de l'automatisation par VBScript de la transformation qui donne ces problèmes.

    Mon SXL est très simple, il permet de supprimer un type de balise (ID_Source) et de garder TOUT le reste:
    Code xml : 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
    <?xml version="1.0" encoding="ISO-8859-15"?>
    <xsl:transform  version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" version="1.0" encoding="ISO-8859-15" indent="yes"/>
    	<xsl:template match="node()" priority="1">
    		<xsl:copy>
    			<xsl:apply-templates select="node()|@*"/>
    		</xsl:copy>
    	</xsl:template>
    	<!-- règles pour les contenus de balise : on recopie -->
    	<xsl:template match="text()" priority="1">
    		<xsl:value-of select="."/> 
    	</xsl:template>
    	<!-- regle pour les balises : on recopie -->
    	<xsl:template match="@*" priority="1">
    		 <xsl:attribute name="{name()}">
    			<xsl:value-of select="."/>
    		</xsl:attribute> 
    	</xsl:template>
    	<!-- règle spécifique à la balise ID_Source : on vire la ligne (pas de recopie) -->
    	<xsl:template match="ID_Source" priority="2"/>
    </xsl:transform>

    le XML est lui aussi plutôt basique :
    Code xml : 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
    <?xml version="1.0" encoding="ISO-8859-15"?>
    <ElementsRecuperes xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" 
      xsi:noNamespaceSchemaLocation="20070503-090205-export.xsd">
        <ObjetRecupere>
            <Application>
                <Identifiant>iDJWHEiW5Te5</Identifiant>
                <Nom>Réservation</Nom>
                <Commentaire></Commentaire>
                <Numéro_de_version>2.1</Numéro_de_version>
            </Application>
            <Lien>
                <Nom>Message-Emis</Nom>
                <ID_Source>iDJWHEiW5Te5</ID_Source>
                <ID_Destination>ACJWJRiW5vD6</ID_Destination>
            </Lien>
            <Lien>
                <Nom>Message-Emis</Nom>
                <ID_Source>iDJWHEiW5Te5</ID_Source>
                <ID_Destination>VFJW3RiW5DC6</ID_Destination>
            </Lien>
        </ObjetRecupere>
        <ObjetRecupere>
            <Message>
                <Identifiant>ACJWJRiW5vD6</Identifiant>
                <Nom>ventes réalisées </Nom>
            </Message>
            <Lien>
                <Nom>Application-Emettrice</Nom>
                <ID_Source>ACJWJRiW5vD6</ID_Source>
                <ID_Destination>iDJWHEiW5Te5</ID_Destination>
            </Lien>
        </ObjetRecupere>
        ...

    Appliqué à la main avec XMLSpy, le XSL permet bien d'aboutir au résultat cherché
    Code xml : 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
    <?xml version="1.0" encoding="ISO-8859-15"?>
    <ElementsRecuperes xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" 
      xsi:noNamespaceSchemaLocation="20070503-090205-export.xsd">
        <ObjetRecupere>
            <Application>
                <Identifiant>iDJWHEiW5Te5</Identifiant>
                <Nom>Réservation</Nom>
                <Commentaire></Commentaire>
                <Numéro_de_version>2.1</Numéro_de_version>
            </Application>
            <Lien>
                <Nom>Message-Emis</Nom>
                <ID_Destination>ACJWJRiW5vD6</ID_Destination>
            </Lien>
            <Lien>
                <Nom>Message-Emis</Nom>
                <ID_Destination>VFJW3RiW5DC6</ID_Destination>
            </Lien>
        </ObjetRecupere>
        <ObjetRecupere>
            <Message>
                <Identifiant>ACJWJRiW5vD6</Identifiant>
                <Nom>ventes réalisées </Nom>
            </Message>
            <Lien>
                <Nom>Application-Emettrice</Nom>
                <ID_Destination>iDJWHEiW5Te5</ID_Destination>
            </Lien>
        </ObjetRecupere>
        ...
    abertaud
    ---------

    - pas de réponse technique en PV, utilisez les forums
    - si vous trouvez seuls la solution, n'abandonnez pas votre post, mettez-le à jour pour les autres
    - le tag est parfois en voie d'extinction, participez à sa survie

Discussions similaires

  1. xml and xsl transformation dans jsf
    Par kakikaki dans le forum JSF
    Réponses: 2
    Dernier message: 29/04/2008, 09h57
  2. Réponses: 1
    Dernier message: 28/06/2007, 02h24
  3. Différence transformations XSL+XML et XSL+XML+PHP
    Par vir2al_killer dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 21/05/2007, 14h16
  4. [XSLT] Insertion du nom du fichier XML par transformation XSL
    Par stepd dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/07/2006, 11h40
  5. Transformer un très gros fichier XML avec XSL
    Par wozzz dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 30/05/2006, 10h57

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