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] que sont ces nodes?


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut [xsl] que sont ces nodes?
    bonjour,
    je transforme un doc xml contenant des noeuds <elements>
    jusque la pas de problème.
    La ou je ne comprend plus rien, c est tout ce qui concerne les noeuds
    <!DOCTYPE....>
    <?xml qq chose...>

    quelqu pourrait il me renseigner la dessus, que sont ils, comment y accéder via xsl pour les copier par exemple
    merci

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    node() permet d'acceder a tous les types de noeuds sauf namspace et attribut
    pour les namespace=> namespace::*
    pour les attribut=> attribute::* ou @*

    si tu veux etre plus specifique

    le contenu d'un noeud element (balise)est un text()
    <?.....?> est une processing-instruction()
    <!--....--> est un comentaire comment()

  3. #3
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    merci Erwy, je vais me renseigner sur ce snoeud, au moins je sais comment ça s appelle maintenant, je te remercie beaucoup

  4. #4
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    petite question concernant ces processing instructions.
    j ai écrit un template simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="processing-instruction()">
      <xsl:copy/>
    </xsl:template>
    le probleme est que ça ne marche pas si je cherche à copier ceux contenu dans un fichier externe importé via une variable document('doc.xml')
    déclaré ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="XMLessai" select="document($XMLessaidoc)/*"/>
    par la suite j appelle le template de la manière suivante:
    <xsl:apply-templates select="$XMLessai//processing-instruction()"/>


    ...mais ça ne fonctionne pas du tout

  5. #5
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    attention si tu parle de la premiere processing-instruction qui est dans tous les fichiers xml, je ne crois pas qu'elle puisse être atteinte par un xpath, elle me semble hors du ROOT du document

    Si c'est celle la de quelles infos a tu besoins ?

  6. #6
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml-stylesheet href="rep/convert.xslt" type="text/xsl"?>
    <?locales autrerep/locales.xml?>
    <!DOCTYPE e:element PUBLIC "-//seb//DTD//EN" "../seb/dtds.dtd">
    <e:element ....../>
    voila globalement l aspect du fichier que je stocke dans ma variable
    il semble que le parsing ne marche plus du tout depuis que j ai ces processing instructions ds mon doc (je souligne que les chemins sont bons)
    ...or j ai besoin de les copier puis de faire un traitement sur le reste du doc (ce que je faisais déja avant)

  7. #7
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    je confirme si tu parle de la declaration xml du debut

    Citation Envoyé par W3C
    NOTE: The XML declaration is not a processing instruction. Therefore, there is no processing instruction node corresponding to the XML declaration.

  8. #8
    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
    C'est parce que tu stocke le mauvais noeud dans ta variable. Avec cette écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="XMLessai" select="document($XMLessaidoc)/*"/>
    La fonction document() renvoyant le noeud racine du document, l'expression document($XMLessaidoc)/* pointera donc vers l'élément fils du noeud racine, soit l'élément racine <e:element>. Or, la "processing instruction" se trouve en amont de cet élément, elle est fille directe du noeud racine. Il faut donc que tu corriges ta déclaration de variable de cette façon pour que ton xsl:apply-templates fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="XMLessai" select="document($XMLessaidoc)"/>
    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

  9. #9
    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
    Citation Envoyé par tiscars
    ...or j ai besoin de les copier puis de faire un traitement sur le reste du doc (ce que je faisais déja avant)
    Attention, il y a deux choses que tu ne pourras pas recopier :
    - comme le soulignait Erwy, le prologue XML (<?xml version="1.0" ?>)
    - La balise <!DOCTYPE>, qui est destinée exclusivement au parseur et n'est pas accessible par des expressions XPath dans ta feuille de style.

    Ce n'est pas pour autant une contrainte, puisque le prologue XML et la déclaration de DTD seront générées automatiquement dans le XML de sortie lors de la transformation selon les valeurs que tu auras mises dans les attributs method, encoding, version, doctype-system et doctype-public de ta balise <xsl:output>.
    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

  10. #10
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    en effet comme le dit grandfather * et node() sont tres different * ne selectionne que les noeuds de type element (balise) au contraire de node

    donc soit dans tu te place en amont comme grandfather te le propose ou alors tu remplace le * par node()

  11. #11
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    merci bcp à vous deux, effectivement je pensais que * était le strict équivalent de node().
    je commence à me débrouiller en xsl mais cette histoire de doctype et processing-instruction() est assez nouvelle pour moi et je suis completement perdu, surtout qu avec xmlspy qui vérifie tout, la DTD n est jamais valide... bref ça devient un peu n importe quoi
    mais grâce à votre aide je vais pouvoir sortir un peu la tête du guidon, merci bcp

  12. #12
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    je n est pas réussi à mettre la balise <!DOCTYPE dans mon doc...
    cela étant dit j ai con,tourné les problème en faisant ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    			<xsl:text disable-output-escaping="yes">
    			<![CDATA[
    				<!DOCTYPE doc [
    					<!ENTITY e:seb PUBLIC "-//SEB//LOL DTD 1.0.2//EN" "../dtd/SEB.dtd">
    					<!ENTITY e:Sab PUBLIC "-//SEB//LOL DTD 1.0.2//EN" "../dtd/SAB.dtd">
    					]>
    				]]>
    			</xsl:text>
    j avoue ne rien comprendre ce que les doctypes signifient, tout ce que je sais c est qu il est onligatoire que j écrive ceci dans la sortie de mon xml...
    ce qui est le cas...
    là où j ai effectivement un problème c est lorsque je souhaite reparser le fichier résultant de cette transformation je me retrouve avec l erreur suivante

    Entity names, PI targets, notation names and attribute values declared to be of
    types ID, IDREF(S), ENTITY(IES) or NOTATION cannot contain any colons.

    Evidemment, pour moi, c est du chinois je ne sais même pas ce que cette erreur signifie...
    bref si quelqu un comprend...merci

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/04/2007, 22h03
  2. Réponses: 4
    Dernier message: 12/08/2005, 14h57
  3. Que sont les violations d'accès ?
    Par James64 dans le forum Langage
    Réponses: 7
    Dernier message: 21/06/2005, 12h35
  4. [XML][XSL]Comment atteindre ces 2 header séparément?
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 27/05/2005, 07h36
  5. Que sont les StringTables et comment s'en servir?
    Par Crisanar dans le forum Windows
    Réponses: 6
    Dernier message: 05/11/2004, 16h57

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