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] aide pour lire un id de noeud enfant.


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 22
    Points : 8
    Points
    8
    Par défaut [XSL] aide pour lire un id de noeud enfant.
    Bonjour à tous,

    J'ai besoin d'aide à comprendre le fonctionnement d'un fichier xml avec xslt.
    j'ai mon fichier xml que voici
    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
     
    <racine>
    	<categories id="1" name="Liens utiles pour les entrepreneurs">
    		<liens id="1">
    			<nom>La toile entrepreneuriale</nom>
    			<description>Ce portail se veut une ressource facilitant l'acc峻 ....</description>
    			<url>http://www.januq.com</url>
    		</liens>
    	</categories>
    	<categories id="2" name="Organismes gouvernementaux">
    		<liens id="2">
    			<nom>Portail "Demarage d'entreprise"...</nom>
    			<description>Ce site offre des informations sur les differentes...</description>
    			<url>http://www.demarrer-entreprise.info.gouv.qc.ca/</url>
    		</liens>
    	</categories>
     
    	<nouvelles>
    		<nom>Ordre du jour...</nom>
    	</nouvelles>
    </racine>
    et j'aimerais faire une liste classé par l'id de la catégories.
    mais en XSL je n'y arrive pas. je n'arrive pas a trouver comment faire un for-each des categories et dans chaques catégories faire un for-each de chaques liens.

    quelqu'un a une idée?
    ceci doit donner un resultat comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Liens utiles pour les entrepreneurs
        La toile entrepreneuriale
             Ce portail se veut une ressource facilitant l'acc峻 ....
             http://www.januq.com
     
    Organismes gouvernementaux
        Portail "Demarage d'entreprise"...
             Ce site offre des informations sur les differentes...
             http://www.demarrer-entreprise.info.gouv.qc.ca/
    Merci de bien vouloir me donner une piste sur comment je doit proceder.

  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,

    je n'arrive pas a trouver comment faire un for-each des categories et dans chaques catégories faire un for-each de chaques liens.
    Tu as trouvé toi-même la solution ! Alors, où est-ce que ca bloque ? Plutôt que de te renvoyer vers les tutoriaux, poste ton code en l'état.

  3. #3
    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 : 48
    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
    marrant cette fixation sur les for-each les apply templates c'est sympa aussi.
    Mais bon le vieux est un fan du for-each donc....
    une solution en template pour le fun qd meme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:apply-templates select="racine/categories">
    <xsl:sort select="@id"/>
    </xsl:apply-templates>
    ...
    <xsl:template match="categories">
    <xsl:apply-templates select="url"/>
    </xsl:template>
     
    ...
    <xsl:template match="url">
    <xsl:value-of select="."/>
     
    </xsl:template>

  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
    Mais bon le vieux est un fan du for-each donc....
    Juste pour montrer que le "vieux" ne commence pas à perdre la boule, un extrait des conseils d'optimisation des feuilles de style de la documentation de Xalan 2.6 :

    - Don't use "//" (descendant axes) patterns near the root of a large document.
    - Use xsl:key elements and the key() function as an efficient way to retrieve node sets.
    - Where possible, use pattern matching rather than xsl:if or xsl:when statements.
    - xsl:for-each is fast because it does not require pattern matching.
    - Keep in mind that xsl:sort prevents incremental processing.
    - When you create variables,
    <xsl:variable name="fooElem" select="foo"/>
    is usually faster than
    <xsl:variable name="fooElem"><xsl:value-of-select="foo"/></xsl:variable>
    - Be careful using the last() function.
    - The use of index predicates within match patterns can be expensive.
    - Decoding and encoding is expensive.
    Erwy>>Je crois savoir que tu utilises MSXML, mais je pense que ces conseils sont également valables. A moins qu'il ne soit impossible d'optimiser avec MSXML ?

  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 : 48
    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
    ben ce quiet marrant c'est que moi tout ce que j'ai pu trouver comme optimisation deconseillait les for-each car il utiliserait un algo recursif pour faire de l'iteratif
    ca doit vachement dependre du processeur

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 424
    Points : 15 794
    Points
    15 794
    Par défaut
    si je peux me permettre (ce me gène toujours de troubler une discution de couple ) un avantage des template et de séparer les différents traitements ce qui facilite la maintenance

  7. #7
    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
    ce me gène toujours de troubler une discution de couple
    C'est rien, juste un petit conflit de génération...
    un avantage des template et de séparer les différents traitements ce qui facilite la maintenance
    Cette séparation n'est pas toujours souhaitable. Notamment lorsque le traitement d'un élément différe selon le contexte, ce qui oblige à utiliser les modes, qui ne sont pas réputés pour rendre le code + clair. Perso, je suis les règles suivantes :
    - Si le traitement d'un élément est uniforme dans tout le XSL, j'implèmente le traitement dans un template
    - Si le traitement diffère selon le contexte, ou si j'ai besoin que ca dépote, j'utilise des for-each à chaque fois

  8. #8
    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 : 48
    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 realite j'utilise pas mal des for-each dans mes programmes
    mais c'est souvent dans des templates nomme ca permet de simuler des apply-templates avec passage de parametres,tres pratqie pour certains algo de transformation genre fichier xml extrait d'une base oracle(format select avec des lignes) dont les lignes ont des roles parent fis en fonction d'un valeur.Jamais trouve un moyen de le traiter autrement.Donc les for each j'en fait mais dans 99% ds cas c'est avec n call

    ps:non mais ,je vais pas me laisser faire par le croulant

Discussions similaires

  1. aide pour lire des caractere dans un jtexfield
    Par jerem721 dans le forum Graphisme
    Réponses: 2
    Dernier message: 05/09/2007, 16h04
  2. Besoin d'aide pour lire son avec SDL
    Par Spooky6900 dans le forum SDL
    Réponses: 1
    Dernier message: 28/02/2007, 18h12
  3. Demande d'aide pour lire le contenu d'une editbox.
    Par Pierre.g dans le forum Windows
    Réponses: 3
    Dernier message: 20/10/2006, 21h56
  4. Besoin d'aide pour lire dans le registre
    Par Pierre.g dans le forum Windows
    Réponses: 6
    Dernier message: 16/08/2006, 22h37
  5. aide pour lire le contenu d'un fichier de base de donnée
    Par hichamo dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 11/05/2006, 10h01

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