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 :

si xmlns dans source alors pas de transformations [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 9
    Points
    9
    Par défaut si xmlns dans source alors pas de transformations
    Bonjour,

    J'ai un petit problème, si, dans la première balise de ma source j'ai défini des attributs xmlns, lorsque je veux faire une transformation rien ne se passe (la sortie est identique à l'entrée.
    Si je supprime ces attributs, tout fonctionne très bien.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <TEI xsi:schemaLocation="http://www.tei-c.org/ns/1.0 file:ASP/asp.xsd"
         xmlns="http://www.tei-c.org/ns/1.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:xs="http://www.w3.org/2001/XMLSchema"
         xmlns:xhtml="http://www.w3.org/TR/xhtml/strict"
         xmlns:ns="http://www.tei-c.org/ns/1.0"
         xmlns:hfp="http://www.w3.org/2001/XMLSchema-hasFacetAndProperty"
         xmlns:examples="http://www.tei-c.org/ns/Examples">
    => ma sortie est identique à l'entrée

    => Mon document est bien transformé.

    Je ne comprends pas pourquoi, ni comment résoudre ce problème (je ne suis pas censée toucher aux documents sources).

  2. #2
    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 : 50
    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 Bérilia,

    l'espace de nom des éléments de ton documents XML est :
    http://www.tei-c.org/ns/1.0.

    Les règles d'une feuille de style prennent ne en charge que les éléments d'un ensemble d'espaces de noms donnés.
    Autrement dit, les éléments xml de l'espace de nom par défaut (http://www.tei-c.org/ns/1.0) sont ne sont pas traités par les règles qui les transforment, mais plutôt pas une règle similaire à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <!-- node() | @* -->
     <xsl:template match="node() | @*" priority="-1"/>
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Autrement dit, pour que ça marche, il faudrait :

    - mettre le namespace correspondant, avec un préfixe, dans le <xsl:stylesheet>
    - utiliser ce préfixe dans l'attribut match de tes templates

    En gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:tei="http://www.tei-c.org/ns/1.0"
      >
     
      <xsl:template match="tei:TEI">
        <!-- ton template sur l'élément <TEI> -->
      </xsl:template>
     
    </xsl:stylesheet>
    En résumé, il faut apprendre ce que c'est que les namespaces et les xmlns. Ce ne sont pas des attributs.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    En clair, je ne peux pas faire une feuille de transformation commune pour mes fichiers avec xmlns et ceux sans?

    Pour chaque fichier avec xmlns, j'en ai un correspondant qui n'a pas toutes ces déclarations et je dois les traiter de la même façon.

    Je ne pourrais pas supprimer ces namespaces à l'intérieur de la feuille de transformation? Ils ne servent à rien.

    Merci pour vos réponses, c'est un peu plus clair!

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Citation Envoyé par Bérilia Voir le message
    En clair, je ne peux pas faire une feuille de transformation commune pour mes fichiers avec xmlns et ceux sans?
    Si, mais il va falloir reconnaître indépendamment ceux avec et ceux sans.

    On peut envisager deux méthodes :

    #1 - même chose que mon exemple précédent, mais le template doit réagit aussi bien sur <TEI> que sur <tei:TEI>. Pareil pour toutes les balises.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="TEI | tei:TEI">
      <!-- ton template sur l'élément <TEI> -->
    </xsl:template>
    #2 - forcer un matching indépendant des namespaces, en se basant sur le local-name() des balises plutôt que sur un matching habituel.

    Dans ce cas, pas besoin de déclarer xmlns:tei dans <xsl:stylesheet>.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="*[local-name() = 'TEI']">
      <!-- ton template sur l'élément <TEI> -->
    </xsl:template>
    Citation Envoyé par Bérilia Voir le message
    Je ne pourrais pas supprimer ces namespaces à l'intérieur de la feuille de transformation? Ils ne servent à rien.
    XSLT*ne modifie rien, XSLT crée.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    XSLT*ne modifie rien, XSLT crée.
    Oui, c'est vrai! C'était vraiment une question stupide!

    Merci beaucoup pour ton aide!

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

Discussions similaires

  1. Erreur xmlns dans un fichier .xmi pour une transformation ATL
    Par Walma dans le forum Eclipse Modeling
    Réponses: 0
    Dernier message: 16/09/2014, 13h17
  2. Erreur de xmlns dans un fichier.xmi pour une transformation ATL
    Par sacha33 dans le forum Eclipse Modeling
    Réponses: 3
    Dernier message: 27/05/2013, 13h21
  3. Réponses: 1
    Dernier message: 30/05/2011, 00h40
  4. Réponses: 5
    Dernier message: 20/09/2005, 14h39
  5. lien popup href défini dans javascript mé pas visibdans page
    Par Yoyo_galère dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 13/01/2005, 14h43

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