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 :

[XSL]Ajout Namespace a partir du contenu d'une balise


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Inscrit en
    Février 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 2
    Points : 3
    Points
    3
    Par défaut [XSL]Ajout Namespace a partir du contenu d'une balise
    Bonjour à tous,

    A aujourd'hui je souhaiterai créer 'dynamiquement' le namespace de mon xml via un XSL mais je n'y arrive pas :-(

    En entrée j'ai çà :
    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
     
    <MessageOperateur>
    	<EnveloppeConnexion>
    		<connexionId>120023015</connexionId>
    		<interchangeAgreementId>00000001</interchangeAgreementId>
    		<numEnveloppe>1023182249</numEnveloppe>
    		<DateTime>
    			<date>23/10/09</date>
    			<time>18:22:49</time>
    		</DateTime>
    		<applicationId>toto</applicationId>
    	</EnveloppeConnexion>
    	<Messages>
    		<Message>
    			<EnveloppeMessage>
    				<schemaID>MessageMFR815</schemaID>
    				<schemaVersion>0.1</schemaVersion>
    				<partyId>titi</partyId>
    				<transactionId>1256314969557</transactionId>
    				<numseq>0</numseq>
    			</EnveloppeMessage>
    </MessageOperateur>
    et je souhaiterai
    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
     
    <MessageOperateur xmlns : http://namespace1/MFR815>
    	<EnveloppeConnexion>
    		<connexionId>120023015</connexionId>
    		<interchangeAgreementId>00000001</interchangeAgreementId>
    		<numEnveloppe>1023182249</numEnveloppe>
    		<DateTime>
    			<date>23/10/09</date>
    			<time>18:22:49</time>
    		</DateTime>
    		<applicationId>toto</applicationId>
    	</EnveloppeConnexion>
    	<Messages>
    		<Message>
    			<EnveloppeMessage>
    				<schemaID>MessageMFR815</schemaID>
    				<schemaVersion>0.1</schemaVersion>
    				<partyId>titi</partyId>
    				<transactionId>1256314969557</transactionId>
    				<numseq>0</numseq>
    			</EnveloppeMessage>
    </MessageOperateur>
    Tout en sachant que je vais chercher l'information dans la balise <SchemaID>

    Le code que j'ai fait aujourd'hui me permet seulement de le faire en dur :
    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
     
    <?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="*" priority="3">
        <xsl:element name="{local-name()}" namespace="http://namespace1/">
          <xsl:apply-templates select="@*|node()" />
        </xsl:element>
      </xsl:template>
     
      <xsl:template match="@*|node()">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>
    </xsl:stylesheet>
    Si vous avez des idées précieuses, je vous en remercie.

    Merci d'avance.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    Bonjour,

    Quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:element name="{local-name()}" namespace="http://namespace1/{//schemaID[1]}">
    le code Xpath (ici //schemaID[1]) étant à mettre à jour selon la logique qui s'applique aux données.

  3. #3
    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,

    pas mal comme sujet je ne l'ai jamais rencontré.

    je ferais quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:variable name="string" >
      <xsl:value-of select="XPath to schemaID"/>
    </xsl:variable>  
     
     <xsl:template match="*" priority="3">
        <xsl:element name="{local-name()}" namespace="concat('http://namespace1/',$string)">
          <xsl:apply-templates select="@*|node()" />
        </xsl:element>
      </xsl:template>
    Avec XPath to schemaID :
    /MessageOperateur/Messages/Message/EnveloppeMessage/schemaID

    Je sais qu'il existe un chemin plus simple à exprimer, peut-être //schemaID.
    Je ne suis pas sur, a tester.

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/07/2006, 09h31
  2. Ouvrir un fichier excel à partir du contenu d'une cellule
    Par Lou12 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/07/2006, 13h28
  3. Réponses: 5
    Dernier message: 19/06/2006, 23h22
  4. [xsl] mauvaise interprétation du contenu d'une balise XML
    Par Cédric B. dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/01/2006, 12h59

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