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 :

[XPath][Compréhension] noeud courant


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 15
    Points : 13
    Points
    13
    Par défaut [XPath][Compréhension] noeud courant
    Bonjour à tous,

    Je veux tout simplement extraire une partie d'un fichier xml.
    J'ai eu beau lire le cours de Erwan Lamoureux sur le noeud courant j'ai dû mal à comprendre dans le cas précis qui suit :

    Voilà la feuille de style :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE xsl:stylesheet  [
    	<!ENTITY nbsp   " ">
    	<!ENTITY copy   "©">
    	<!ENTITY reg    "®">
    	<!ENTITY trade  "™">
    	<!ENTITY mdash  "—">
    	<!ENTITY ldquo  "“">
    	<!ENTITY rdquo  "”"> 
    	<!ENTITY pound  "£">
    	<!ENTITY yen    "¥">
    	<!ENTITY euro   "€">
    ]>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="UTF-8" version="1.0" standalone="yes" omit-xml-declaration="no"/>
     
    <xsl:template match="/">
    <xsl:comment>Fichier XML servant à l'importation des listes de villes par département dans Web QFQDMV et fichiers_qfqdmv pour FileMaker Pro </xsl:comment>
    <xsl:comment>Fichier XML servant à élaborer liste de villes pour la création d'encarts en version web du Back Office </xsl:comment>
    </xsl:template>
     
    <xsl:template match="/quifaitqqfqdmv">
    <xsl:apply-templates select="self::quifaitqqfqdmv/child::Départements_child_villes">
    <xsl:sort data-type="number" select="child::IdVille" order="ascending"/>
    </xsl:apply-templates>
    <xsl:value-of select="current()"/>
    </xsl:template>
     
    <xsl:template match="/quifaitqqfqdmv/child::Départements_child_villes">
     
    <xsl:copy-of select="child::IdVille"/>
    <xsl:copy-of select="child::IdDépartement"/>
    <xsl:copy-of select="child::code_postal_ville"/>
    <xsl:copy-of select="child::nom_ville"/>
     
    </xsl:template>
     
    </xsl:stylesheet>
    et la structure du xml d'entrée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml .... ?>
    <quifaitqqfqdmv>
    <....></....>
    <Départements_child_villes>
    <IdVille></IdVille>
    <IdDépartement></IdDépartement>
    <code_postal_ville></code_postal_ville>
    <nom_ville></nom_ville>
    </Départements_child_villes>
    </quifaitqqfqdmv>
    Si je reprends ce que j'ai compris du comportement du processeur :
    Le noeud courant au départ est le noeud racine, puis la déclaration xml, etc..., enfin l'élément quifaitqqfqdmv. Là application du premier template "/quifaitqqfqdmv", appel du template
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "/quifaitqqfqdmv/child::Départements_child_villes"
    , déplacement du noeud courant vers chaque noeud Départements_child_villes de la liste résultat. Les chemins xpath "child::IdVille", etc... devraient donc être valides.

    Or, je n'ai rien que la sortie du template "/".

    Désolé pour ce post un peu long, mais les débuts sont difficiles...

    A plus,
    Fred

  2. #2
    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
    hummm, je suis pas sur que ça marche ton truc...

    déja j aurais écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="/"><xsl:apply-templates/></xsl:apply-templates>
    histoire de lancer la chaîne de templates (mais je suis pas sûr que se soit obligatoire)

    sinon, est ce que pour ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="quifaitqqfqdmv/child::Départements_child_villes">
    tu souhaites appliquer un template sur les quifaitqqfqdmv qui ont un enfant Départements_child_villes?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="quifaitqqfqdmv[Départements_child_villes]"/>
    ou les Départements_child_villes qui ont un parent quifaitqqfqdmv ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="Départements_child_villes[parent::quifaitqqfqdmv]"/>

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 15
    Points : 13
    Points
    13
    Par défaut [Débutant][XPATH]noeud courant
    Salut,

    pour l'histoire du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:apply-templates/>
    dans l'élément racine j'ai essayé et ça ne change rien. Sauf si le processeur s'arrête sur une erreur, il devrait continuer sa recherche dans l'arborescence.

    En fait, je veux appliquer un modêle à 4 des 5 sous-éléments de /quifaitqfqdmv/child:épartements_child_villes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:copy-of select="child::IdVille"/>
    <xsl:copy-of select="child::IdDépartement"/>
    <xsl:copy-of select="child::code_postal_ville"/>
    <xsl:copy-of select="child::nom_ville"/>
    Le test de "parentalité" n'est pas nécessaire puisque tous sont enfants de quifaitqfqdmv.

    Est ce que ça serait pas plutôt une histoire de liste et d'itérations. Le XPATH as t'il besoin de retourner une liste de noeuds pour un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="...">
    ?

    Tel que je l'ai compris non...?

    Merci pour ta réponse et à bientôt,

    Fred

  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
    je pesne que le plus simple serait de savoir ce que tu veux faire...
    le résultat attendu


    en attendant ton code
    <xsl:copy-of select="child::IdVille"/> n est pas nécessaire..
    quand tu est dans le template traitant quifaitqfqdmv il te suffit d ecrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:template match="quifaitqfqdmv">
      <xsl:copy-of select="IdVille"/>
      <......./>
    </xsl:template>

Discussions similaires

  1. [XPATH] Position d'un noeud par rapport à la racine ?
    Par DemonKN dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 22/10/2008, 18h51
  2. [XSLT ]Problémes avec un Xpath - noeud courant
    Par Mo_Poly dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 01/12/2007, 19h56
  3. [XPath] Sélection d'un noeud fils du noeud courant
    Par hobotalker dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/06/2007, 15h55
  4. Réponses: 3
    Dernier message: 06/04/2007, 15h32
  5. position() relative au noeud courant
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 09/09/2004, 17h38

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