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 :

XSLT pour changer le nom de la racine et le namespace


Sujet :

XML/XSL et SOAP

  1. #1
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut XSLT pour changer le nom de la racine et le namespace
    Bonjour,

    Microsoft Access exporte des fichiers XML qui commencent toujours par "dataroot". A part Bill G, cette racine dataroot n'intéresse personne. Comment puis-je la changer ?
    J'ai des fichiers de départ comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2017-11-16T17:38:14">
    	<Tag>AAA</Tag>
    	<Tag>BBB</Tag>
    </dataroot>
    et je désire obtenir des fichiers avec un nouveau nom pour le Root Element et un nouveau namespace comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8"?>
    <Document xmlns="urn:iso:xxxxx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    	<Tag>AAA</Tag>
    	<Tag>BBB</Tag>
    </Document>
    Les transformations xslt que j'ai écrites ne me mènent nulle part.
    Merci pour votre aide.

  2. #2
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Si je fais ceci :
    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"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     
    	<xsl:template match="@*|node()">
    		<xsl:copy >
    			<xsl:apply-templates select="@*|node()"/>
    		</xsl:copy>
    	</xsl:template>	
     
    	<xsl:template match="/*">
    		<Document xmlns="urn:iso:xxxxx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    			<xsl:copy>
    				<xsl:apply-templates select="node()"/>
    			</xsl:copy> 
    		</Document>
    	</xsl:template>
     
    </xsl:stylesheet>
    J'obtiens un XML qui contient toujours ce fichu dataroot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="UTF-8"?>
    <Document xmlns="urn:iso:xxxxx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    	<dataroot xmlns="" xmlns:od="urn:schemas-microsoft-com:officedata">
    		<Tag>AAA</Tag>
    		<Tag>BBB</Tag>
    	</dataroot>
    </Document>
    Ce n'est pas ce que je veux. Comment puis-je me débarasser de ce dataroot ?

    Merci pour votre aide.

  3. #3
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Vous pouvez considérer faire ça.
    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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:od="urn:schemas-microsoft-com:officedata"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    >
    <xsl:strip-space elements="*" />
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" encoding="utf-8" />
    <xsl:template match="*[ancestor::dataroot]">
        <xsl:element name="{local-name()}" namespace="urn:iso:xxxxx">
            <xsl:apply-templates select="*|@*|text()" />
        </xsl:element>
    </xsl:template>
    <xsl:template match="dataroot">
        <Document xmlns="urn:iso:xxxxx">
            <xsl:apply-templates select="*|@*|text()" />
        </Document>
    </xsl:template>
    </xsl:stylesheet>

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par PipoWIL Voir le message
    Comment puis-je me débarasser de ce dataroot ?
    En enlevant le <xsl:copy> que tu fais sur le match="/*" qui s'applique sur ce dataroot. Si tu ne le veux pas, ne le copie pas.

    Mais comme l'illustre tsuji, si tu veux que tes éléments <Tag> soient dans le même namespace que ton nouvel élément <Document>, tu ne peux pas les copier : les originaux ne sont pas dans ce namespace !
    Il va falloir les recréer avec le même nom et le namespace de ton document.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Merci beaucoup tsuji, de m'avoir donné la solution. Cela fonctionne bien.
    Votre xslt garde la "date generated" de microsoft et procure un xml du genre de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Document xmlns="urn:iso:xxxxx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    2017-11-21T09:39:16
    <CstmrDrctDbtInitn>....
    J'ai donc changé le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="@*|*|text()"/>
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="*|text()"/>
    Comme je sais que, à ce stade, je n'ai pas d'attribut dans aucune balise du XML, je me suis permis de supprimer ce @*
    J'utilise donc ce xslt
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    	<xsl:strip-space elements="*"/>
    	<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" encoding="utf-8"/>
     
    	<xsl:template match="*[ancestor::dataroot]">
    		<xsl:element name="{local-name()}" namespace="urn:iso:xxxxx">
    			<xsl:apply-templates select="*|text()"/>
    		</xsl:element>
    	</xsl:template>
    	<xsl:template match="dataroot">
    		<Document xmlns="urn:iso:xxxxx">
    			<xsl:apply-templates select="*|text()"/>
    		</Document>
    	</xsl:template>
    </xsl:stylesheet>
    Cela fonctionne bien. Encore merci.

Discussions similaires

  1. Script pour changer le nom des fichiers
    Par MR-SMOOT dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 30/08/2014, 16h26
  2. moulinette pour changer des noms de colonnes
    Par salluste dans le forum Excel
    Réponses: 6
    Dernier message: 26/03/2014, 10h06
  3. [XSLT] pour récupérer le nom du fichier d'entrée
    Par alouani dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 20/06/2011, 10h14
  4. Comment changer le nom du répertoire racine d'un projet ?
    Par zerbynette dans le forum Eclipse C & C++
    Réponses: 1
    Dernier message: 20/01/2010, 11h09
  5. [XSLT] pour récupérer le nom du fichier d'entrée
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 31/05/2007, 10h58

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