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

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2018
    Messages : 13
    Points : 8
    Points
    8

    Par défaut Récuperation contenu balisé par élément commencant par certaines letrres

    salut

    Je cherche à récuperer le contenu balisé par les élément dont le nom commence par co avec un xslt et le mettre entre balise p

    voici le xml:



    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
     
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <project>
          <objet>
              <PRIX code_barre="3057640123958">20</PRIX>
              <composition>
                  <T type1="aze" type2="111" type3="V">texte</T>
                  <T type1="a" type2="18" type3="l">texte</T>
                  <T type1="ce" type2="13" type3="l">texte</T>
                  <T type1="de" type2="163" type3="V">texte</T>
              </composition>
              <PROVENANCE>
                  <lieu PAYS="CHINE">PULL</lieu>
                  <continent>ASIE</CONTINENT>
              </PROVENANCE>
          </objet>
          <objet>
              <PRIX code_barre="323547157008">15</PRIX>
              <composition>
                  <T type1="aze" type2="111" type3="V">texte</T>
                  <T type1="a" type2="18" type3="l">texte</T>
                  <T type1="ce" type2="13" type3="l">texte</T>
                  <T type1="de" type2="163" type3="V">texte</T>
              </composition>
              <PROVENANCE>
                      <lieu PAYS="CHINE">CASQUETTE</lieu>
                      <continent>ASIE</CONTINENT>
              </PROVENANCE>
          </objet>
    </project>
    Voici ce que j'ai tenter de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    <xsl:template match="project">
     
        <P>
     
         je dois mettre ici mon expression regulière pour chercher les mots commencant par co : \\bco\\w* \\b
         mais je ne sais pas comme dire que cela doit être une balise
     
        </P>
     
      </xsl:template>

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    11 804
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 11 804
    Points : 20 023
    Points
    20 023

    Par défaut

    Euh, t'as oublié de dire quel devait être le résultat de la transformation.

    "commençant par co" c'est pas d'une clarté transcendante... Quitte à commencer à donner un exemple pour mettre les choses au clair, autant faire cet exemple en entier.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2018
    Messages : 13
    Points : 8
    Points
    8

    Par défaut

    je cherchais à récuperer le contenu des balises commençant par 'co' mais je pense avoir trouvé la solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:template match="/">        
        <xsl:value-of select="/descendant::node() [starts-with(local-name(),'mo')]"/>    
    </xsl:template>

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    11 804
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 11 804
    Points : 20 023
    Points
    20 023

    Par défaut

    Là, tu n'en auras qu'une.

    plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:for-each select="//*[starts-with(local-name(), 'co')]">
     <one>
       <xsl:value-of select="."/>
     </one>
    </xsl:for-each>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2018
    Messages : 13
    Points : 8
    Points
    8

    Par défaut

    //* signifie pareil que /descendant::node() qui en gros chercher tous les noeuds ?

    J'ai tester mon xslt et je n'en ai pas qu'une et je comprend pas pourquoi mettre <one> pour ne pas en prendre qu'un ?

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2018
    Messages : 13
    Points : 8
    Points
    8

    Par défaut

    je crois que tu voulais mettre les balises one juste pour différencier chaque balise on l'on récupère je suis bête ^^

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    11 804
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 11 804
    Points : 20 023
    Points
    20 023

    Par défaut

    Citation Envoyé par GeekJ Voir le message
    //* signifie pareil que /descendant::node() qui en gros chercher tous les noeuds ?
    Presque. //* signifie pareil que /descendant:* qui va chercher tous les éléments mais ignore, par exemple, les nœuds texte. De toute façon, tu ne cherches que des éléments, alors node() n'est pas utile.

    Citation Envoyé par GeekJ Voir le message
    J'ai tester mon xslt et je n'en ai pas qu'une
    Vraiment ? C'est étrange. Tu pourrais montrer un exemple entier ? Le XML, le XSLT que tu appliques dessus, et le résultat qui montre que tu récupérais plus de un élément ?

    Citation Envoyé par GeekJ Voir le message
    et je comprend pas pourquoi mettre <one> pour ne pas en prendre qu'un ?
    Là n'est pas la question. Mes balises <one> étaient là pour montrer qu'on récupère plus d'un élément, en les mettant chacun entre balises <one> et </one>.

    Mais faire qu'on récupère tous les éléments, ça c'était par l'usage de for-each à la place de value-of.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2018
    Messages : 13
    Points : 8
    Points
    8

    Par défaut

    voila le document xml

    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <magasin xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <article>
                <v>azee</v>
              <composition>
                    <a>dvd1</a>
                    <a >dvd2</a>
                    <a >dvd3</a>
                    <a >dvd4</a>
                </composition>
                <source>
                      <lieu >boedeaux</lieu>
                      <departement>aquitaine</departement>
                </source>
                <contenance>25</contenance>
     
          </article>
          <article>
                <v>azee</v>
                <composition>
                      <a>dvd11</a>
                      <a >dvd12</a>
                      <a >dvd13</a>
                      <a >dvd44</a>
                </composition>
                <source>
                      <lieu >bordeaux</lieu>
                      <departement>aquitaine</departement>
                </source>
                <contenance>52</contenance>
     
          </article>
    </magasin>


    le xslt que je lui applique
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        exclude-result-prefixes="xs"
        version="2.0">
     
     
        <xsl:template match="/">
     
            <xsl:value-of select="/descendant::node() [starts-with(local-name(), 'co')]"/>
     
     
        </xsl:template>
     
    </xsl:stylesheet>
    et ce que j'obtient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="UTF-8"?>
                    dvd1
                    dvd2
                    dvd3
                    dvd4
                 25 
                      dvd11
                      dvd12
                      dvd13
                      dvd44
                 52

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    11 804
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 11 804
    Points : 20 023
    Points
    20 023

    Par défaut

    Diable, tu as raison. J'utilise toujours XSLT 1.0 pour les cas simples, mais <xsl:value-of> a un comportement différent entre 1.0 et 2.0.

    Du coup effectivement, ton code récupère bien tous les éléments commençant par "co". Mais je trouve que cette récupération manque de souplesse. Il est pas super joli et exploitable, ton résultat.

    Enfin, si ça fait le job dont tu as besoin...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2018
    Messages : 13
    Points : 8
    Points
    8

    Par défaut

    ok merci beaucoup pour ton aide en tout cas

    juste un dernier point sur lequel tu pourrais m'éclairer .L'expression xpath qui est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /descendant::node() | @mode
    je comprend bien que la partie /descendant::node() va chercher dans tous mon document tous type de noeuds .Par contre le | qui signifie ou me pose problème.
    Est-ce que cela veut dire tous les noeuds qui ont l'attribut mode ou bien tous les noeuds ou les noeuds avec l'attribut mode ce qui paraît bizarre puisque du coup le |@mode serait inutile puisque l'on récupère déjà tous les noeuds
    En espérant être comprehensible.

  11. #11
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    11 804
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 11 804
    Points : 20 023
    Points
    20 023

    Par défaut

    Cette notation est en fait très étrange et je pense qu'il s'agit d'une erreur.

    La notation @mode signifie "récupère l'attribut mode de l'élément en cours". Ça peut servir, mais ça se mélange assez mal à ce qu'il y a avant.

    Concernant | qui veut dire "ou" il faut bien se mettre d'accord sur ce que ça signifie au bout du compte.

    Pour tout A et B, "A | B" signifie "récupère A, et récupère aussi B"

    Du coup,

    /descendant::node() | @mode

    Signifie

    "Récupère tous les éléments, tous les nœuds texte, et toutes les processing instructions du document. Et, récupère aussi l'attribut mode de l'élément en cours."

    C'est très bizarre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2018
    Messages : 13
    Points : 8
    Points
    8

    Par défaut

    parfait encore merci pour ton aide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/09/2013, 12h20
  2. Récuperer l'id du dernier élément crée dynamiquement
    Par el_bacha dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/07/2011, 07h20
  3. [DOM] Ordre des attributs dans un élément
    Par Mischka dans le forum XML
    Réponses: 4
    Dernier message: 14/04/2008, 15h19
  4. [XSLT] Dédoublonner des attributs
    Par 242 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 10/11/2005, 15h44
  5. [VB.NET][XML] Récupere l'attribut du dernier noeud ds un XML
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/09/2004, 14h14

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