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


Sujet :

XSL/XSLT/XPATH XML

  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 et namespace
    Bonjour,

    Avec ce fichier XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-16"?>
    <Task version="1.2">
      <RegistrationInfo>
        <Date>2014-01-30T16:47:39.1426044</Date>
        <Author>Romeo</Author>
        <Description>fights for the love of his life</Description>
      </RegistrationInfo>
    </Task>
    je désire changer l'auteur. Au lieu de Romeo, je veux avoir Juliette.
    J'utilise cette transformation 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
    <?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" indent="yes" encoding="UTF-16"/>
     
    <xsl:template match="@*|node()">
    	<xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>
     
        <xsl:template match="/Task/RegistrationInfo/Author">
    		<Author>Juliette</Author>
        </xsl:template>
     
    </xsl:stylesheet>
    qui fonctionne bien et me donne le résultat que je veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-16"?>
    <Task version="1.2">
    	<RegistrationInfo>
    		<Date>2014-01-30T16:47:39.1426044</Date>
    		<Author>Juliette</Author>
    		<Description>fights for the love of his life</Description>
    	</RegistrationInfo>
    </Task>
    Tout cela semble très bien.

    Le problème, c'est que mon fichier de départ est légèrement différent : il contient une référence xmlns qui m'empêche d'utiliser ma transformation xslt.
    Le vrai fichier de départ est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-16"?>
    <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
      <RegistrationInfo>
        <Date>2014-01-30T16:47:39.1426044</Date>
        <Author>Romeo</Author>
        <Description>fights for the love of his life</Description>
      </RegistrationInfo>
    </Task>
    Avec cet attribut xmlns, mon fichier xslt ne donne rien !

    Pourriez-vous svp m'expliquer pourquoi ?
    Comment puis-je corriger mon fichier xslt pour qu'il fonctionne avec cet attribut xmlns ?

    Merci pour votre aide et vos explications

  2. #2
    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
    Dans le document xml au départ, il y a une declaration de namespace; c'est bien compris je pense et c'est une declaration par défaut, et par par défaut, on veut dire simplement qu'elle entend de s'appliquer même qu'il n'y a pas un préfixe explicit attaché au nom local du noeud d'élément, mais, il faut faire attention à ça, qu'elle entend aussi par désigne du langage de ne pas s'appliquer pour des attributs de cette façon par implication.

    Pourtant, dans xslt, même si on déclare le même namespace par défaut dans la racine xsl:style mimique à ce qu'on fait dans le document xml, les composants de xpath... dans les @match et @select sont agnostiques à cette déclaration. On fait une déclaration de ce namespace avec un préfixe arbitraire mais syntaxiquement correct bien entendu. Et c'est ce qu'il faut faire effectivement et généralement.

    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:ns="http://schemas.microsoft.com/windows/2004/02/mit/task">
    <xsl:output method="xml" indent="yes" encoding="UTF-16"/>
     
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>
     
    <xsl:template match="/ns:Task/ns:RegistrationInfo/ns:Author">
        <xsl:copy>Juliette</xsl:copy>
    </xsl:template>
     
    </xsl:stylesheet>
    Et avec xsl:copy, la sortie s'applique automatiquement la déclaration par défaut. C'est plus net, pourtant pas plus. Voilà.

  3. #3
    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.
    Cela m'aide bien.

Discussions similaires

  1. [XSLT] namespace
    Par peyote dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 19/01/2010, 16h19
  2. [XSLT] Probleme de selection avec namespaces
    Par Ludo_xml dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 01/06/2005, 14h32
  3. [XSLT]Sortir les balise d'un namespace d'un XML
    Par virgul dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 12/04/2005, 11h30
  4. [XSLT]petit(s) pb(s) avec les xmlns et <xsl:namespace-ali
    Par Swoög dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/01/2005, 17h04
  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