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 balise HTML div


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre émérite

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Points : 2 717
    Points
    2 717
    Par défaut [Résolu] XSLT et balise HTML div
    Salut,

    J'ai un p'tit problème dans mon site web. Je l'ai passé au XML+XSLT+CSS2 récement, mais j'ai un problème à la validation w3c.org : 'there is no attribute "XMLNS" [ for div ]'. Code 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <xsl:variable name="baniere">
      <div class="enbref">
       En bref : (...)
      </div>
    </xsl:variable>
     
    <xsl:template match="@*|node()">
      <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
      </xsl:copy>
    </xsl:template>
     
    <xsl:template match="/doc">
      <html>
        <head>...</head>
        <body>
          <xsl:apply-templates select="$baniere" />
          <div class="centre">
            <xsl:apply-templates select="@*|node()" />
            ...
            <div class="spacer"><hr /></div>
          </div>
        </body>
      </html>
    </xsl:template>
    (la racine de mes documents XML étant /doc)

    Ceci me génère deux types de balises div :
    1- <div xmlns:xsl="http://www.w3.org/1999/XSL/Transform" class="baniere">
    2- <div class="centre">

    Le problème venant des balises (1) qui sont passées à travers "<xsl:apply-templates select="@*|node()" />".

    @+ Haypo

  2. #2
    Membre régulier
    Inscrit en
    Avril 2003
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 52
    Points : 78
    Points
    78
    Par défaut
    Et par quel template est généré le cas 1 ?

  3. #3
    Membre régulier
    Inscrit en
    Avril 2003
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 52
    Points : 78
    Points
    78
    Par défaut
    Excuse ! J'avais pa vu que tu répondais à ma question...

    A mon avis et à vu de nez, il doit y avoir dans ton XML source des balises "div" avec l'espace de nom de xslt ?

  4. #4
    Membre émérite

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Points : 2 717
    Points
    2 717
    Par défaut
    Les balises div sont placées dans les fichiers XSLT (.xsl). C'est l'entête qui n'est pas bon ?
    (baniere.xsl)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:variable name="baniere">
    ...
    </xsl:variable>
    </xsl:stylesheet>
    Au fait, j'ai plusieurs fichiers XSLT :
    - html.xsl
    - general.xsl
    - baniere.xsl
    - signature.xsl
    - estat.xsl
    - ...

    Mes fichiers .PHP appellent html.xsl qui inclu general.xsl, qui lui inclu presque tout le reste :
    (html.xsl)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:include href="xsl/general.xsl" />
    ...
    (general.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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:param name="page" />
     
    ...
     
    <xsl:template match="@*|node()">
      <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
      </xsl:copy>
    </xsl:template>
     
    <xsl:include href="xsl/baniere.xsl" />
    <xsl:include href="xsl/menu.xsl" />
    <xsl:include href="xsl/sous_menu.xsl" />
    <xsl:include href="xsl/signature.xsl" />
     
    </xsl:stylesheet>
    Avez-vous besoin de tout le code source ?

    @+ Haypo

  5. #5
    Membre régulier
    Inscrit en
    Avril 2003
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 52
    Points : 78
    Points
    78
    Par défaut
    Surtout pas ! Bien au contraire, essaie d'isoler ce qui provoque cette déclaration d'espace de nom intempestive. Enlève des includes, supprime des templates, etc.

  6. #6
    Membre émérite

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Points : 2 717
    Points
    2 717
    Par défaut
    Le problème venait des balises div placées à l'intérieur d'une page XSLT. L'attribut "xmlns:xsl=..." était généré par la page XSLT lors du passage à travers xsl:apply-templates. J'ai trouvé ma solution sur le net :
    http://www.biglist.com/lists/xsl-list/archives/200108/msg00552.html

    Il ne faut pas utiliser le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="@*|node()">
      <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
      </xsl:copy>
    </xsl:template>
    car selon la référence W3C.org :
    The xsl:copy element provides an easy way of copying the current node. Instantiating the xsl:copy element creates a copy of the current node. The namespace nodes of the current node are automatically copied as well, but the attributes and children of the node are not automatically copied. The content of the xsl:copy element is a template for the attributes and children of the created node; the content is instantiated only for nodes of types that can have attributes or children (i.e. root nodes and element nodes).
    http://www.w3.org/TR/xslt#copying

    ---

    Finalement, il faut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:template match="@*">
      <xsl:copy />
    </xsl:template>
     
    <xsl:template match="*">
      <xsl:element name="{name()}" >
        <xsl:apply-templates select="* | text() | @*"/>
      </xsl:element>
    </xsl:template>
    @+ Haypo

  7. #7
    Membre émérite

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Points : 2 717
    Points
    2 717
    Par défaut
    J'ai répondu, mais ma réponse semble s'être perdu dans les méandes d'Internet ...

    J'ai résolu mon problème, il venait de xsl:copy, car cette fonction (?) copie le namespace. J'utilise alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:template match="@*">
      <xsl:copy />
    </xsl:template>
     
    <xsl:template match="*">
      <xsl:element name="{name()}" >
        <xsl:apply-templates select="* | text() | @*"/>
      </xsl:element>
    </xsl:template>
    Et les problèmes ont disparus ;-) J'ai maintenant réussi à faire passer ma page (mon site !) en XHTML 1.1, cool.

    @+ Haypo

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

Discussions similaires

  1. Edition d'une balise HTML div dans une WebView
    Par everdgg dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 13/07/2012, 12h57
  2. [XSLT] Comment inclure une balise xsl dans une balise html
    Par sylsau dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 13/10/2006, 09h33
  3. [XSLT][PHP]conversion balise html
    Par abdoulax dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/10/2006, 11h34
  4. [XSLT][>HTML]Affiché des balises HTML
    Par tiboel dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/06/2006, 20h15
  5. [XSLT] inclure du XSL dans une balise html
    Par iaa dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/08/2002, 15h57

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