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:Template sur un élément sans namespace


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut xsl:Template sur un élément sans namespace
    Bonjour,

    Petite question de débutant...
    J'ai un fichier XML en entrée contenant des balises avec namespace et des balises sans namespace (en fait, c'est un fichier xml pur auquel on a appliqué des feuilles de transformation pour avoir un fichier WordML).
    extrait du fichier XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    <w:body>
    <CONTRACTANTS>
    <w:p>
    <w:pPr>
    <w:pStyle w:val="R-Para"/>
    </w:pPr>
    <w:rPr/>
    </w:p>
    </CONTRACTANTS>
    ...
    Je souhaiterais appliquer une transformation sur ma balise : <CONTRACTANTS ID="TOTO"> pour afficher l'attribut ID

    J'ai donc entre autre écrit dans ma feuille 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
    <xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:fn="http://www.w3.org/2004/07/xpath-functions" 
    xmlns:xdt="http://www.w3.org/2004/07/xpath-datatypes"  
    xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
    <xsl:template match="/">
    <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="CONTRACTANTS">
    <xsl:variable name="ID" select="@ID"/>
    <xsl:value-of select="$ID"/>
    </xsl:variable
    </xsl:stylesheet>
    Le problème, c'est que je ne rentre pas dans mon template match="CONTRACTANTS"... Par contre, si je lui mets un préfixe w:CONTRACTANT dans mon fichier XML et dans mon template, cela fonctionne.
    J'ai donc un problème de namespace mais n'y connaissant pas grand chose, je voudrais savoir comment appliquer un template sur un élément sans préfixe.

    Merci d'avance.

  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,

    dans ton XML il n'y a pas de préfixe devant <CONTRACTANTS>, mais cet élément doit sans doute appartenir quand même à un espace de nom par défaut, ce qui explique l'echec du match du template. As-tu, parmi les éléments ancètres de <CONTRACTANTS>, une déclaration du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <truc xmlns="http://schemas.microsoft.com/office/word/2003/wordml">
    ...
    </truc>

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    oui...
    J'ai une balise du type :
    <PARENT xmlns="urn:sigloy:document:1.0" UNITE="EURO" ETAT="document de travail" VALIDATION="AVANT">

    je suppose donc que le urn:sigloy:document:1.0 doit intervenir quelque part mais je n'arrive pas à l'utiliser !

    Que dois-je en faire ?

    Merci d'avance.

  4. #4
    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
    xmlns="urn:sigloy:document:1.0" est une définition d'espace de noms par défaut, et tous les éléments (attention, pas les attributs) qui sont enfants de <PARENT> et qui n'appartiennent pas à un autre espace de nom, par défaut ou autre (celui désigné par le préfixe w, par exemple), appartiennent à cet espace de nom.

    Pour prendre en compte cet espace de nom, pas besoin de modifier ton XML, déclare-le dans ton XSL, attribue-lui un préfixe, et utilise ce préfixe dans chaque expression XPath qui mentionne un élément appartenant à cet espace de nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:fn="http://www.w3.org/2004/07/xpath-functions" 
    xmlns:xdt="http://www.w3.org/2004/07/xpath-datatypes"  
    xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
    xmlns:toto="urn:sigloy:document:1.0"> 
    ...
    <xsl:template match="toto:CONTRACTANTS">
    ...
    </xsl:template>
    J'ai choisi toto comme préfixe, mais libre à toi d'en choisir un autre...

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    MERCI
    Cela fonctionne.

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

Discussions similaires

  1. Cliquer sur un élément sans toucher l'écran
    Par Kimly dans le forum Développement iOS
    Réponses: 0
    Dernier message: 18/07/2014, 10h33
  2. Préciser namespace sur chaque élément d'un xml
    Par c.soub dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 29/04/2010, 13h54
  3. [XHTML 1.0] Insérer un élément permanent(qui n'est pas rafraîchi) sur mon site sans frames
    Par DarkSoul dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 24/02/2009, 16h38
  4. [XSL][Templates]Du texte sur une page déterminée?
    Par cackybis dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/06/2006, 09h58
  5. [XSL FO] afficher template sur colonnes alternativement
    Par elzedo dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 29/06/2005, 12h53

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