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] namespace


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 11
    Points
    11
    Par défaut [XSLT] namespace
    Bonjour,

    j'ai un probleme concernant une transformation XSL d'un XML en un autre XML.

    voici mon xml d'entrée (genéré par un outil annexe que ne maitrise pas donc je ne peux pas le modifier)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <Class xmlns="http://mondomaine/" >
       <SeverityLevel>
          <level>0</level>
       </SeverityLevel>
       <SeverityLevel>
          <level>1</level>
       </SeverityLevel>
      </Class>
    et le 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
     
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
       <xsl:output method="xml" indent="yes" />
     
       <xsl:template match="/" >
          <xsl:apply-templates />
       </xsl:template>
     
       <xsl:template match="SeverityLevel">
          <xsl:variable name="level">
          	<xsl:value-of select="level"/>
          </xsl:variable>
     
         <xsl:copy> 
         	<xsl:element name="level">
         	<xsl:value-of select="$level"/>
         	</xsl:element>	
            <xsl:element name="label">
                    <xsl:choose>
               <xsl:when test="level=0">
               <xsl:text>Warning</xsl:text>
                </xsl:when>
                </xsl:choose>
             </xsl:element>
          </xsl:copy>
     
       </xsl:template>
     
     </xsl:stylesheet>
    Il ne se passe rien, comme si le fichier n'avait pas de xsl associé
    Le probleme vient de la declaration xmlns="http://mondomaine/" dans la balise Class car quand je l'enleve tout fonctionne. Helas je ne voit pas trop quoi declarer dans le xsl pour que cela fonctionne.

    Merci pour votre aide

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

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

    toutes les balises de ton XML ont comme espace de nom par défaut xmlns="http://mondomaine/". Dans ton XSL, tu dois ajouter le même espace de noms en l'associant à un préfixe que tu utiliseras à chaque fois que tu fais référence à une de ces balises dans une expression XPath.

    Si dans ton XML de sortie tu ne veux pas qu'il y ait référence à cet espace de nom, place le préfixe dans l'attribut exclude-result-prefixes du xsl:stylesheet.

    Exemple :
    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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:toto="http://mondomaine/"
    exclude-result-prefixes="toto"> 
     
       <xsl:output method="xml" indent="yes" /> 
     
       <xsl:template match="/" > 
          <xsl:apply-templates /> 
       </xsl:template> 
     
       <xsl:template match="toto:SeverityLevel"> 
          <xsl:variable name="level"> 
             <xsl:value-of select="toto:level"/> 
          </xsl:variable> 
     
         <xsl:copy> 
            <xsl:element name="level"> 
            <xsl:value-of select="$level"/> 
            </xsl:element>    
            <xsl:element name="label"> 
                    <xsl:choose> 
               <xsl:when test="level=0"> 
               <xsl:text>Warning</xsl:text> 
                </xsl:when> 
                </xsl:choose> 
             </xsl:element> 
          </xsl:copy> 
     
       </xsl:template> 
     
     </xsl:stylesheet>
    Evidemment, tu peux choisir un autre préfixe que toto...
    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

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    excellent ca fonctionne, merci

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 291
    Points : 126
    Points
    126
    Par défaut
    Merci beaucoup aussi car ça ma aidé.

    Par hasard vous ne connaissez pas un bon logiciel graphique pour visualisez modifier et faire tourner xslt sans passé pas des lignes de commande ou Visual studio. Marci d'avance

  5. #5
    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
    Citation Envoyé par zoltix Voir le message
    Merci beaucoup aussi car ça ma aidé.

    Par hasard vous ne connaissez pas un bon logiciel graphique pour visualisez modifier et faire tourner xslt sans passé pas des lignes de commande ou Visual studio. Marci d'avance
    http://www.oxygenxml.com/xslt_editor.html

    très bien et à un prix abordable.

  6. #6
    Membre régulier
    Avatar de madvic
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Mai 2003
    Messages : 101
    Points : 92
    Points
    92
    Par défaut pas bon pour moi
    Bonjour,
    J'ai ajouté l'attribut : exclude-result-prefixes
    et pourtant , j'ai quand même le namespace qui s'affiche quand je fais un <xsl:copy-of select="balise">.
    (j'utilise oxygen...)
    merci

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

Discussions similaires

  1. [XSLT][namespace] Création worksheet via template
    Par Graineur dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 09/11/2010, 00h23
  2. [XSLT] namespace ajouté intempestivement
    Par ekoralewski2 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/04/2008, 16h05
  3. [XSLT] NameSpace dans Balise ?
    Par xiii34 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 03/04/2007, 09h44
  4. [XSLT]Namespace vide non conforme XHTML
    Par FlyByck dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/09/2006, 15h11
  5. namespace dans feuille xslt : comment ca marche exactement ?
    Par guipom dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 11/11/2004, 16h21

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